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 2020/01/21 16:09:25 UTC

[isis] branch master updated (f4c9187 -> e1088f0)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from f4c9187  ISIS-2158: fixes regression
     new 40d9955  ISIS-2267: adds some further docs for cfg props
     new f6bdac3  ISIS-2264: simplifies WebAppConfiguration, just use IsisConfiguration directly.
     new 67253f3  ISIS-2264: removes all of WebAppConfiguration state, just use IsisConfiguration
     new 52be174  ISIS-2264: removes remainder of WebAppConfiguration class
     new 73c2704  ISIS-2264: converts some config props to Optional<T>
     new f4bc54a  ISIS-2264: adds some more config docs.  Renames some properties.
     new 880be5a  ISIS-2264: further config docs.
     new 795b8a9  ISIS-2264: fixes compile issue
     new f65ea49  ISIS-2264: updates docs
     new cacabf4  ISIS-2264: more on cfg docs, changing some further to Optional
     new e1088f0  ISIS-2264: updates docs

The 11 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../modules/mignotes/pages/migrating-to-2.0.0.adoc |  15 +
 .../applib-ant/examples/annotation/Nature.java     |   6 +-
 .../examples/services/factory/FactoryService.java  |   3 +
 .../config/examples/generated/isis.applib.adoc     | 122 +++---
 .../isis.core.meta-model.introspector.adoc         |   6 +-
 .../generated/isis.core.meta-model.validator.adoc  |  12 +-
 .../generated/isis.core.runtime-services.adoc      |   8 +-
 .../examples/generated/isis.core.runtime.adoc      |   2 +-
 .../config/examples/generated/isis.extensions.adoc |  22 +-
 .../config/examples/generated/isis.legacy.adoc     |   6 +-
 .../isis.persistence.jdo-datanucleus.impl.adoc     |  28 +-
 .../examples/generated/isis.value-types.adoc       |  71 ++--
 .../generated/isis.viewer.restfulobjects.adoc      |   2 +-
 .../examples/generated/isis.viewer.wicket.adoc     | 146 ++++---
 .../config/pages/configuration-properties.adoc     |  11 +-
 .../apache/isis/core/config/IsisConfiguration.java | 434 ++++++++++++++++++---
 .../isis/core/config/IsisModuleCoreConfig.java     |   2 -
 .../config/viewer/wicket/WebAppConfiguration.java  | 128 ------
 .../config/viewer/wicket/WebAppContextPath.java    |   5 +
 .../additional-spring-configuration-metadata.json  |   7 +-
 .../menubars/MenuBarsLoaderServiceDefault.java     |  54 +--
 .../cors/impl/webmodule/WebModuleCors.java         |  23 --
 scripts/generateConfigDocs.groovy                  |   8 +-
 .../wicket/model/isis/WicketViewerSettings.java    |   3 +
 .../models/whereami/WhereAmIModelDefault.java      |   4 +-
 .../wicket/ui/components/about/AboutPanel.java     |   9 +-
 .../wicket/ui/components/footer/FooterPanel.java   |   4 +-
 .../wicket/ui/components/welcome/WelcomePanel.java |   6 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |   2 +-
 .../ui/components/widgets/favicon/Favicon.java     |  37 +-
 .../ui/components/widgets/navbar/BrandLogo.java    |  19 +-
 .../ui/components/widgets/navbar/BrandName.java    |  25 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  10 +-
 .../isis/viewer/wicket/ui/pages/WebPageBase.java   |  16 +-
 .../accmngt/AccountManagementPageAbstract.java     |   6 +-
 .../password_reset/PasswordResetEmailPanel.java    |   4 +-
 .../accmngt/signup/RegistrationFormPanel.java      |   8 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |   5 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |   8 +-
 .../isis/viewer/wicket/ui/panels/PanelBase.java    |  18 +-
 .../services/WicketViewerSettingsDefault.java      |   4 +
 .../viewer/wicketapp/IsisWicketApplication.java    |   9 +-
 42 files changed, 826 insertions(+), 492 deletions(-)
 delete mode 100644 core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java


[isis] 02/11: ISIS-2264: simplifies WebAppConfiguration, just use IsisConfiguration directly.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f6bdac3f1422979c982245e61b6eafed9dd39052
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 10:49:47 2020 +0000

    ISIS-2264: simplifies WebAppConfiguration, just use IsisConfiguration directly.
---
 .../config/viewer/wicket/WebAppConfiguration.java  | 33 ++++++++--------------
 .../wicket/ui/components/about/AboutPanel.java     |  9 +++---
 .../wicket/ui/components/footer/FooterPanel.java   |  2 +-
 .../ui/components/widgets/favicon/Favicon.java     |  4 ++-
 .../ui/components/widgets/navbar/BrandName.java    |  4 ++-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  4 +--
 .../isis/viewer/wicket/ui/pages/WebPageBase.java   |  6 ++++
 .../accmngt/AccountManagementPageAbstract.java     |  2 +-
 .../password_reset/PasswordResetEmailPanel.java    |  4 +--
 .../accmngt/signup/RegistrationFormPanel.java      |  4 +--
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |  4 +--
 .../isis/viewer/wicket/ui/panels/PanelBase.java    |  6 ++++
 12 files changed, 44 insertions(+), 38 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
index 87d40c4..14b5de9 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
@@ -52,11 +52,6 @@ public class WebAppConfiguration {
 
     @Getter private AbstractResource menubarsLayoutXml;
     
-    @Getter private String applicationName;
-    @Getter private String applicationVersion;
-    @Getter private String aboutMessage;
-    @Getter private String faviconContentType;
-
     // URLs *not* sensitive to context path (remove any leading /)
     @Getter private String applicationCss;
     @Getter private String applicationJs;
@@ -78,33 +73,29 @@ public class WebAppConfiguration {
     @PostConstruct
     public void init() {
 
-        val application = isisConfiguration.getViewer().getWicket().getApplication();
-        
-        this.menubarsLayoutXml = lookup(application.getMenubarsLayoutXml());
-        
-        this.applicationName = application.getName();
-        this.aboutMessage = application.getAbout();
-        this.applicationVersion = application.getVersion();
+        this.menubarsLayoutXml = lookup(getIsisConfiguration().getViewer().getWicket().getApplication().getMenubarsLayoutXml());
         
-        this.applicationCss = ignoreLeadingSlash(application.getCss());
-        this.applicationJs = ignoreLeadingSlash(application.getJs());
+        this.applicationCss = ignoreLeadingSlash(getIsisConfiguration().getViewer().getWicket().getApplication().getCss());
+        this.applicationJs = ignoreLeadingSlash(getIsisConfiguration().getViewer().getWicket().getApplication().getJs());
 
-        this.brandLogoHeader = contextPathSensisitve(application.getBrandLogoHeader());
-        this.brandLogoSignin = contextPathSensisitve(application.getBrandLogoSignin());
-        this.faviconUrl = contextPathSensisitve(application.getFaviconUrl());
+        this.brandLogoHeader = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getBrandLogoHeader());
+        this.brandLogoSignin = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getBrandLogoSignin());
+        this.faviconUrl = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getFaviconUrl());
         
-        this.faviconContentType = application.getFaviconContentType();
-        
-        val welcome = isisConfiguration.getViewer().getWicket().getWelcome();
+        val welcome = getIsisConfiguration().getViewer().getWicket().getWelcome();
         
         this.welcomeMessage = ignoreLeadingSlash(welcome.getText());
 
     }
 
+    private IsisConfiguration getIsisConfiguration() {
+        return isisConfiguration;
+    }
+
 
     // -- HELPER
 
-    private String contextPathSensisitve(String url) {
+    private String contextPathSensitive(String url) {
         return webAppContextPath.prependContextPathIfLocal(url); 
     }
     
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
index 914d141..c1c1e78 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
@@ -26,6 +26,7 @@ import javax.inject.Named;
 
 import org.apache.wicket.markup.html.basic.Label;
 
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.viewer.wicket.model.models.AboutModel;
 import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -77,11 +78,9 @@ public class AboutPanel extends PanelAbstract<AboutModel> {
     public AboutPanel(final String id) {
         super(id);
 
-        val webAppConfigBean = super.getWebAppConfigBean();
-        
-        add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_NAME, webAppConfigBean.getApplicationName()));
-        add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_VERSION, webAppConfigBean.getApplicationVersion()));
-        add(new LabelVisibleOnlyIfNonEmpty(ID_ABOUT_MESSAGE, webAppConfigBean.getAboutMessage()));
+        add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_NAME, getIsisConfiguration().getViewer().getWicket().getApplication().getName()));
+        add(new LabelVisibleOnlyIfNonEmpty(ID_APPLICATION_VERSION, getIsisConfiguration().getViewer().getWicket().getApplication().getVersion()));
+        add(new LabelVisibleOnlyIfNonEmpty(ID_ABOUT_MESSAGE, getIsisConfiguration().getViewer().getWicket().getApplication().getAbout()));
 
         if(jarManifestModel == null) {
             jarManifestModel = new JarManifestModel(super.getCommonContext(),  metaInfManifestIs);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
index 2ff9adb..c488d1a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
@@ -160,7 +160,7 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
         final BookmarkablePageLink<Void> aboutLink = new BookmarkablePageLink<>(ID_ABOUT_LINK, AboutPage.class);
         add(aboutLink);
 
-        String applicationVersion = getWebAppConfigBean().getApplicationVersion();
+        String applicationVersion = getIsisConfiguration().getViewer().getWicket().getApplication().getVersion();
 
         final Label aboutLabel =
                 applicationVersion != null && !applicationVersion.isEmpty()?
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
index 512b9ff..8081f84 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
@@ -24,6 +24,7 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.util.string.Strings;
 
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 
 /**
@@ -34,6 +35,7 @@ public class Favicon extends WebComponent {
     private static final long serialVersionUID = 1L;
 
     @Inject private transient WebAppConfiguration webAppConfigBean;
+    @Inject private transient IsisConfiguration isisConfiguration;
 
     private String url;
     private String contentType;
@@ -42,7 +44,7 @@ public class Favicon extends WebComponent {
         super(id);
         if(webAppConfigBean!=null) {
             url = webAppConfigBean.getFaviconUrl();
-            contentType = webAppConfigBean.getFaviconContentType();
+            contentType = isisConfiguration.getViewer().getWicket().getApplication().getFaviconContentType();
         }
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
index e8fb4f0..1e69e77 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 
 /**
@@ -35,6 +36,7 @@ public class BrandName extends Label {
     private final Placement placement;
 
     @Inject private transient WebAppConfiguration webAppConfigBean;
+    @Inject private transient IsisConfiguration isisConfiguration;
 
     private String logoHeaderUrl;
     private String logoSigninUrl;
@@ -51,7 +53,7 @@ public class BrandName extends Label {
         this.placement = placement;
         
         if(webAppConfigBean!=null) {
-            applicationName = webAppConfigBean.getApplicationName();
+            applicationName = isisConfiguration.getViewer().getWicket().getApplication().getName();
             logoHeaderUrl = webAppConfigBean.getBrandLogoHeader();
             logoSigninUrl = webAppConfigBean.getBrandLogoSignin();
         }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 9028b35..a42901e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -153,7 +153,7 @@ public abstract class PageAbstract extends WebPageBase implements ActionPromptPr
 
             themeDiv = new WebMarkupContainer(ID_THEME);
             add(themeDiv);
-            String applicationName = getWebAppConfigBean().getApplicationName();
+            String applicationName = getIsisConfiguration().getViewer().getWicket().getApplication().getName();
             if(applicationName != null) {
                 themeDiv.add(new CssClassAppender(CssClassAppender.asCssStyle(applicationName)));
             }
@@ -241,7 +241,7 @@ public abstract class PageAbstract extends WebPageBase implements ActionPromptPr
     protected void setTitle(final String title) {
         addOrReplace(new Label(ID_PAGE_TITLE, title != null
                 ? title
-                        : getWebAppConfigBean().getApplicationName()));
+                        : getIsisConfiguration().getViewer().getWicket().getApplication().getName()));
     }
 
     private Class<? extends Page> getSignInPage() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
index ba4130e..b3084fc 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
@@ -22,6 +22,7 @@ import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 import org.apache.isis.core.runtime.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
@@ -36,6 +37,7 @@ public abstract class WebPageBase extends WebPage implements IsisWebAppCommonCon
     private static final long serialVersionUID = 1L;
     
     private transient WebAppConfiguration webAppConfigBean;
+    private transient IsisConfiguration isisConfiguration;
     private transient PageClassRegistry pageClassRegistry;
     private transient IsisWebAppCommonContext commonContext;
     private transient IsisSessionFactory isisSessionFactory;
@@ -53,6 +55,10 @@ public abstract class WebPageBase extends WebPage implements IsisWebAppCommonCon
         return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
     }
     
+    public IsisConfiguration getIsisConfiguration() {
+        return isisConfiguration = computeIfAbsent(IsisConfiguration.class, isisConfiguration);
+    }
+
     public WebAppConfiguration getWebAppConfigBean() {
         return webAppConfigBean = computeIfAbsent(WebAppConfiguration.class, webAppConfigBean);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
index 71c3cb2..e25c5ee 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
@@ -98,7 +98,7 @@ public class AccountManagementPageAbstract extends WebPageBase {
 
 
     private MarkupContainer addPageTitle() {
-        String applicationName = getWebAppConfigBean().getApplicationName();
+        String applicationName = getIsisConfiguration().getViewer().getWicket().getApplication().getName();
         return add(new Label(ID_PAGE_TITLE, applicationName));
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/password_reset/PasswordResetEmailPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/password_reset/PasswordResetEmailPanel.java
index 23a455f..de15c3d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/password_reset/PasswordResetEmailPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/password_reset/PasswordResetEmailPanel.java
@@ -92,8 +92,8 @@ public class PasswordResetEmailPanel extends PanelBase<Void> {
 
         val passwordResetEvent = new PasswordResetEvent(
                 email, 
-                confirmationUrl, 
-                getWebAppConfigBean().getApplicationName());
+                confirmationUrl,
+                getIsisConfiguration().getViewer().getWicket().getApplication().getName());
 
         boolean emailSent = super.getEmailNotificationService().send(passwordResetEvent);
         if (emailSent) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
index e6702fc..3f35be0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
@@ -103,8 +103,8 @@ public class RegistrationFormPanel extends PanelBase<Void> {
 
                 final EmailRegistrationEvent emailRegistrationEvent = new EmailRegistrationEvent(
                         email, 
-                        confirmationUrl, 
-                        webAppConfigBean.getApplicationName());
+                        confirmationUrl,
+                        getIsisConfiguration().getViewer().getWicket().getApplication().getName());
 
                 boolean emailSent = emailNotificationService.send(emailRegistrationEvent);
                 if (emailSent) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
index 492bdc9..121f5d1 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
@@ -69,11 +69,11 @@ public class MmvErrorPage extends WebPageBase {
     }
 
     private MarkupContainer addPageTitle() {
-        return add(new Label(ID_PAGE_TITLE, getWebAppConfigBean().getApplicationName()));
+        return add(new Label(ID_PAGE_TITLE, getIsisConfiguration().getViewer().getWicket().getApplication().getName()));
     }
 
     private void addApplicationName() {
-        add(new Label(ID_APPLICATION_NAME, getWebAppConfigBean().getApplicationName()));
+        add(new Label(ID_APPLICATION_NAME, getIsisConfiguration().getViewer().getWicket().getApplication().getName()));
     }
 
     private void addValidationErrors() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
index 9eb28e1..757462b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
@@ -28,6 +28,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.userreg.EmailNotificationService;
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.runtime.session.IsisSessionFactory;
@@ -55,6 +56,7 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
 
     private transient WicketViewerSettings wicketViewerSettings;
     private transient WebAppConfiguration webAppConfigBean;
+    private transient IsisConfiguration isisConfiguration;
     private transient PageClassRegistry pageClassRegistry;
     private transient ImageResourceCache imageCache;
     private transient MetaModelContext metaModelContext;
@@ -89,6 +91,10 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
         return webAppConfigBean = computeIfAbsent(WebAppConfiguration.class, webAppConfigBean);
     }
     
+    public IsisConfiguration getIsisConfiguration() {
+        return isisConfiguration = computeIfAbsent(IsisConfiguration.class, isisConfiguration);
+    }
+
     public PageClassRegistry getPageClassRegistry() {
         return pageClassRegistry = computeIfAbsent(PageClassRegistry.class, pageClassRegistry);
     }


[isis] 01/11: ISIS-2267: adds some further docs for cfg props

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 40d995569d1b18006d5fd6cbbc4c44a87464de0d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jan 20 23:52:50 2020 +0000

    ISIS-2267: adds some further docs for cfg props
---
 .../apache/isis/core/config/IsisConfiguration.java | 50 ++++++++++++++++++----
 .../wicket/model/isis/WicketViewerSettings.java    |  3 ++
 .../services/WicketViewerSettingsDefault.java      |  4 ++
 3 files changed, 48 insertions(+), 9 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 63385a7..91bd5ac 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2231,33 +2231,51 @@ public class IsisConfiguration {
              * Whether to suppress the sign-up link on the sign-in page.
              *
              * <p>
-             *     Although this is disabled by default (in other words the sign-up link is not suppressed), not that
+             *     Although this is disabled by default (in other words the sign-up link is not suppressed), note that
              *     in addition the application must provide an implementation of the
              *     {@link org.apache.isis.applib.services.userreg.UserRegistrationService} as well as a
-             *     configured {@link org.apache.isis.applib.services.userreg.EmailNotificationService}.
+             *     configured {@link org.apache.isis.applib.services.userreg.EmailNotificationService} (same conditions
+             *     as for the {@link #isSuppressPasswordReset()} password reset link).
              * </p>
              */
             private boolean suppressSignUp = false;
 
 
+            /**
+             * Whether to suppress the password reset link on the sign-in page.
+             *
+             * <p>
+             *     Although this is disabled by default (in other words the 'reset password' link is not suppressed),
+             *     note that in addition the application must provide an implementation of the
+             *     {@link org.apache.isis.applib.services.userreg.UserRegistrationService} as well as a
+             *     configured {@link org.apache.isis.applib.services.userreg.EmailNotificationService} (same conditions
+             *     as for the {@link #isSuppressSignUp()} sign-up link).
+             * </p>
+             */
             private boolean suppressPasswordReset = false;
 
             /**
-             * The pattern used for rendering and parsing timestamps.
+             * @deprecated - seemingly unused
              */
+            @Deprecated
             @NotNull @NotEmpty
             private String timestampPattern = "yyyy-MM-dd HH:mm:ss.SSS";
 
             /**
              * Whether to show an indicator for a form submit button that it has been clicked.
              *
-             * This behaviour is enabled by default, but can be disabled using this flag.
+             * <p>
+             * This behaviour is enabled by default.
+             * </p>
              */
             private boolean useIndicatorForFormSubmit = true;
+
             /**
              * Whether to show an indicator for a no-arg action button that it has been clicked.
              *
-             * This behaviour is enabled by default, but can be disabled using this flag.
+             * <p>
+             * This behaviour is enabled by default.
+             * </p>
              */
             private boolean useIndicatorForNoArgAction = true;
 
@@ -2265,7 +2283,8 @@ public class IsisConfiguration {
              * Whether the Wicket source plugin should be enabled; if so, the markup includes links to the Wicket source.
              *
              * <p>
-             *     Be aware that this can substantially impact performance.
+             *     This behaviour is disabled by default.  Please be aware that enabloing it can substantially impact
+             *     performance.
              * </p>
              */
             private boolean wicketSourcePlugin = false;
@@ -2300,8 +2319,13 @@ public class IsisConfiguration {
                 private String brandLogoSignin;
                 
                 /**
-                 * URL of file to read any custom CSS, relative to relative to the class-path resource 
-                 * root.
+                 * URL of file to read any custom CSS, relative to <code>static</code> package on the class path.
+                 *
+                 * <p>
+                 *     A typical value is <code>css/application.css</code>.  This will result in this file being read
+                 *     from the <code>static.css</code> package (because static resources such as CSS are mounted by
+                 *     Spring by default under <code>static</code> package).
+                 * </p>
                  */
                 private String css;
                 
@@ -2312,7 +2336,15 @@ public class IsisConfiguration {
                 private String faviconUrl;
                 
                 /**
-                 * URL of file to read any custom Javascript, relative to the class-path resource root.
+                 */
+                /**
+                 * URL of file to read any custom Javascript, relative to <code>static</code> package on the class path.
+                 *
+                 * <p>
+                 *     A typical value is <code>css/application.js</code>.  This will result in this file being read
+                 *     from the <code>static.js</code> package (because static resources such as CSS are mounted by
+                 *     Spring by default under <code>static</code> package).
+                 * </p>
                  */
                 private String js;
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
index 57d6b27..6038027 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
@@ -51,7 +51,10 @@ public interface WicketViewerSettings extends Serializable {
 
     /**
      * As per {@link IsisConfiguration.Viewer.Wicket#setTimestampPattern(String)}
+     *
+     * @deprecated - seemingly unused
      */
+    @Deprecated
     String getTimestampPattern();
 
     /**
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/WicketViewerSettingsDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/WicketViewerSettingsDefault.java
index 8666f60..919435c 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/WicketViewerSettingsDefault.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/WicketViewerSettingsDefault.java
@@ -72,6 +72,10 @@ public class WicketViewerSettingsDefault implements WicketViewerSettings {
         return getConfiguration().getViewer().getWicket().getDateTimePattern();
     }
 
+    /**
+     * @deprecated - seemingly unused.
+     */
+    @Deprecated
     @Override
     public String getTimestampPattern() {
         return getConfiguration().getViewer().getWicket().getTimestampPattern();


[isis] 05/11: ISIS-2264: converts some config props to Optional

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 73c2704728cfc061969c3a09acad17eb5a75a2d4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 13:11:45 2020 +0000

    ISIS-2264: converts some config props to Optional<T>
---
 .../apache/isis/core/config/IsisConfiguration.java | 20 +++++++++-----
 .../config/viewer/wicket/WebAppContextPath.java    |  5 ++++
 .../ui/components/widgets/favicon/Favicon.java     | 31 +++++++++++++---------
 3 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index e4ead26..fac0ca3 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2329,12 +2329,20 @@ public class IsisConfiguration {
                  */
                 @javax.validation.constraints.Pattern(regexp="^[^/].*$")
                 private String css;
-                
-                // since 2.0
-                private String faviconContentType;
-                
-                // since 2.0
-                private String faviconUrl;
+
+                /**
+                 * Specifies the content type of the favIcon, if any.
+                 */
+                private Optional<String> faviconContentType = Optional.empty();
+
+                /**
+                 * Specifies the URL to use of the favIcon.
+                 *
+                 * <p>
+                 *     This is expected to be a local resource.
+                 * </p>
+                 */
+                private Optional<String> faviconUrl = Optional.empty();
                 
                 /**
                  */
diff --git a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppContextPath.java b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppContextPath.java
index 24ffbbc..9383c52 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppContextPath.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppContextPath.java
@@ -19,6 +19,7 @@
 package org.apache.isis.core.config.viewer.wicket;
 
 import java.io.Serializable;
+import java.util.Optional;
 import java.util.regex.Pattern;
 
 import javax.annotation.Nullable;
@@ -100,6 +101,10 @@ public class WebAppContextPath implements Serializable {
         return urlOrLocalPath;
     }
     
+    public Optional<String> prependContextPathIfLocal(final Optional<String> urlOrLocalPath) {
+        return urlOrLocalPath.map(this::prependContextPathIfLocal);
+    }
+
     // -- HELPER
     
     private final Pattern pattern = Pattern.compile("^[/]*(.+?)[/]*$");
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
index f4885cc..998f9e4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.favicon;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 
 import org.apache.wicket.markup.ComponentTag;
@@ -37,31 +39,36 @@ public class Favicon extends WebComponent {
     @Inject private transient IsisConfiguration isisConfiguration;
     @Inject private transient WebAppContextPath webAppContextPath;
 
-    private String url;
-    private String contentType;
+    private Optional<String> url = Optional.empty();
+    private Optional<String> contentType = Optional.empty();
     
     public Favicon(String id) {
         super(id);
-        if(webAppContextPath!=null) {
-            url = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getFaviconUrl());
-            contentType = isisConfiguration.getViewer().getWicket().getApplication().getFaviconContentType();
-        }
+
     }
 
     @Override
     protected void onConfigure() {
         super.onConfigure();
-        setVisible(!Strings.isEmpty(url));
+
+        if(webAppContextPath != null && isisConfiguration != null) {
+
+            url = isisConfiguration.getViewer().getWicket().getApplication().getFaviconUrl()
+                    .filter(x -> !Strings.isEmpty(x))
+                    .map(webAppContextPath::prependContextPathIfLocal);
+
+            contentType = isisConfiguration.getViewer().getWicket().getApplication().getFaviconContentType()
+                    .filter(x -> !Strings.isEmpty(x));
+        }
+
+        setVisible(url.isPresent());
     }
 
     @Override
     protected void onComponentTag(ComponentTag tag) {
         super.onComponentTag(tag);
 
-        tag.put("href", url);
-
-        if (!Strings.isEmpty(contentType)) {
-            tag.put("type", contentType);
-        }
+        url.ifPresent(url -> tag.put("href", url));
+        contentType.ifPresent(contentType -> tag.put("type", contentType));
     }
 }


[isis] 07/11: ISIS-2264: further config docs.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 880be5a00a02d85b309beb521fe9d4ee64e57d57
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 14:33:17 2020 +0000

    ISIS-2264: further config docs.
---
 .../apache/isis/core/config/IsisConfiguration.java | 278 +++++++++++++++++++--
 .../cors/impl/webmodule/WebModuleCors.java         |  23 --
 .../viewer/wicketapp/IsisWicketApplication.java    |   9 +-
 3 files changed, 266 insertions(+), 44 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index c029d13..5a7cefe 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2370,9 +2370,9 @@ public class IsisConfiguration {
 
                 /**
                  * Identifies the application on the sign-in page
-                 * (unless a {@link Application#brandLogoSignin} image is configured) and
+                 * (unless a {@link Application#brandLogoSignin sign-in} image is configured) and
                  * on top-left in the header
-                 * (unless a {@link Application#brandLogoHeader} image is configured).
+                 * (unless a {@link Application#brandLogoHeader header} image is configured).
                  */
                 @NotNull @NotEmpty
                 private String name = "Apache Isis ™";
@@ -2438,10 +2438,43 @@ public class IsisConfiguration {
             
             @Data
             public static class Credit {
+                /**
+                 * URL of an organisation or individual to give credit to, appearing as a link in the footer.
+                 * A maximum of 3 credits is supported.
+                 *
+                 * <p>
+                 *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
+                 *     {@link #getName() name} and/or {@link #getImage() image}.
+                 * </p>
+                 */
+                @javax.validation.constraints.Pattern(regexp="^http[s]?://[^:]+?(:\\d+)?/([^/]+/)*$")
                 private String url;
+                /**
+                 * URL of an organisation or individual to give credit to, appearing as text in the footer.
+                 * A maximum of 3 credits is supported.
+                 *
+                 * <p>
+                 *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
+                 *     {@link #getName() name} and/or {@link #getImage() image}.
+                 * </p>
+                 */
                 private String name;
+                /**
+                 * Name of an image resource of an organisation or individual, appearing as an icon in the footer.
+                 * A maximum of 3 credits is supported.
+                 *
+                 * <p>
+                 *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
+                 *     {@link #getName() name} and/or {@link #getImage() image}.
+                 * </p>
+                 */
+                @javax.validation.constraints.Pattern(regexp="^[^/].*$")
                 private String image;
-                
+
+                /**
+                 * Whether enough information has been defined for the credit to be appear.
+                 * @return
+                 */
                 public boolean isDefined() { return (name != null || image != null) && url != null; }
             }
             
@@ -2450,13 +2483,20 @@ public class IsisConfiguration {
             public static class DatePicker {
 
                 /**
+                 * Defines the first date available in the date picker.
+                 *
+                 * <p>
                  * As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
+                 * </p>
                  */
                 @NotEmpty @NotNull
                 private String minDate = "1900-01-01T00:00:00.000Z";
 
                 /**
+                 * Defines the first date available in the date picker.
+                 * <p>
                  * As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
+                 * </p>
                  */
                 @NotEmpty @NotNull
                 private String maxDate = "2100-01-01T00:00:00.000Z";
@@ -2479,9 +2519,44 @@ public class IsisConfiguration {
             private final RememberMe rememberMe = new RememberMe();
             @Data
             public static class RememberMe {
+                /**
+                 * Whether the sign-in page should have a &quot;remember me&quot; link (the default), or if it should
+                 * be suppressed.
+                 *
+                 * <p>
+                 *     If &quot;remember me&quot; is available and checked, then the viewer will allow users to login
+                 *     based on encrypted credentials stored in a cookie.  An {@link #getEncryptionKey() encryption key}
+                 *     can optionally be specified.
+                 * </p>
+                 */
                 private boolean suppress = false;
+
+                /**
+                 * If the &quot;remember me&quot; feature is available, specifies the key to hold the encrypted
+                 * credentials in the cookie.
+                 */
                 private String cookieKey = "isisWicketRememberMe";
-                private String encryptionKey;
+                /**
+                 * If the &quot;remember me&quot; feature is available, optionally specifies an encryption key
+                 * (a complex string acting as salt to the encryption algorithm) for computing the encrypted
+                 * credentials.
+                 *
+                 * <p>
+                 *     If not set, then (in production mode) the Wicket viewer will compute a random key each time it
+                 *     is started.  This will mean that any credentials stored between sessions will become invalid.
+                 * </p>
+                 *
+                 * <p>
+                 *     Conversely, if set then (in production mode) then the same salt will be used each time the app
+                 *     is started, meaning that cached credentials can continue to be used across restarts.
+                 * </p>
+                 *
+                 * <p>
+                 *     In prototype mode this setting is effectively ignored, because the same key will always be
+                 *     provided (either as set, or a fixed literal otherwise).
+                 * </p>
+                 */
+                private Optional<String> encryptionKey = Optional.empty();
             }
 
             private final Themes themes = new Themes();
@@ -2491,7 +2566,7 @@ public class IsisConfiguration {
                 /**
                  * A comma separated list of enabled theme names, as defined by https://bootswatch.com.
                  */
-                private List<String> enabled = new ArrayList<>();
+                private List<String> enabled = listOf("Cosmo","Flatly","Darkly","Sandstone","United");
 
                 /**
                  * The initial theme to use.
@@ -2503,16 +2578,19 @@ public class IsisConfiguration {
                 @NotEmpty @NotNull
                 private String initial = "Flatly";
 
+                /**
+                 * Specifies an implementation of <code>org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupport</code>
+                 *
+                 */
                 @NotEmpty @NotNull
                 private String provider = "org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupportDefault";
 
                 /**
-                 * Whether the theme chooser should be available in the footer.
+                 * Whether the theme chooser widget should be available in the footer.
                  */
                 private boolean showChooser = false;
             }
 
-            //TODO no meta data yet ... https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.html#configuration-metadata-property-attributes
             private final Welcome welcome = new Welcome();
             @Data
             public static class Welcome {
@@ -2524,7 +2602,6 @@ public class IsisConfiguration {
                  */
                 private String text;
             }
-
         }
     }
 
@@ -2540,6 +2617,12 @@ public class IsisConfiguration {
             private final Int Int = new Int();
             @Data
             public static class Int {
+                /**
+                 * Configures the number format understood by <code>IntValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
         }
@@ -2552,6 +2635,12 @@ public class IsisConfiguration {
             private final Byte Byte = new Byte();
             @Data
             public static class Byte {
+                /**
+                 * Configures the number format understood by <code>ByteValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
@@ -2559,6 +2648,12 @@ public class IsisConfiguration {
             private final Double Double = new Double();
             @Data
             public static class Double {
+                /**
+                 * Configures the number format understood by <code>DoubleValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
@@ -2566,6 +2661,12 @@ public class IsisConfiguration {
             private final Float Float = new Float();
             @Data
             public static class Float {
+                /**
+                 * Configures the number format understood by <code>FloatValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
@@ -2573,6 +2674,12 @@ public class IsisConfiguration {
             private final Long Long = new Long();
             @Data
             public static class Long {
+                /**
+                 * Configures the number format understood by <code>LongValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
@@ -2580,6 +2687,12 @@ public class IsisConfiguration {
             private final Short Short = new Short();
             @Data
             public static class Short {
+                /**
+                 * Configures the number format understood by <code>ShortValueSemanticsProviderAbstract</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
         }
@@ -2590,12 +2703,24 @@ public class IsisConfiguration {
             private final BigInteger bigInteger = new BigInteger();
             @Data
             public static class BigInteger {
+                /**
+                 * Configures the number format understood by <code>BigIntegerValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
             private final BigDecimal bigDecimal = new BigDecimal();
             @Data
             public static class BigDecimal {
+                /**
+                 * Configures the number format understood by <code>BigDecimalValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
         }
@@ -2606,37 +2731,72 @@ public class IsisConfiguration {
             private final LocalDateTime localDateTime = new LocalDateTime();
             @Data
             public static class LocalDateTime {
+                /**
+                 * Configures the formats understood by <code>LocalDateTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final OffsetDateTime offsetDateTime = new OffsetDateTime();
             @Data
             public static class OffsetDateTime {
+                /**
+                 * Configures the formats understood by <code>OffsetDateTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final OffsetTime offsetTime = new OffsetTime();
             @Data
             public static class OffsetTime {
+                /**
+                 * Configures the formats understood by <code>OffsetTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final LocalDate localDate = new LocalDate();
             @Data
             public static class LocalDate {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>LocalDateValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final LocalTime localTime = new LocalTime();
             @Data
             public static class LocalTime {
+                /**
+                 * Configures the formats understood by <code>LocalTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final ZonedDateTime zonedDateTime = new ZonedDateTime();
             @Data
             public static class ZonedDateTime {
+                /**
+                 * Configures the formats understood by <code>ZonedDateTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
         }
@@ -2648,7 +2808,12 @@ public class IsisConfiguration {
             private final Date date = new Date();
             @Data
             public static class Date {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JavaUtilDateValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
@@ -2660,20 +2825,35 @@ public class IsisConfiguration {
             private final Date date = new Date();
             @Data
             public static class Date {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JavaSqlDateValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
             private final Time time = new Time();
             @Data
             public static class Time {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JavaSqlTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "short";
             }
 
             private final Timestamp timestamp = new Timestamp();
             @Data
             public static class Timestamp {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JavaSqlTimeStampValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "short";
             }
 
@@ -2685,21 +2865,36 @@ public class IsisConfiguration {
             private final LocalDateTime localDateTime = new LocalDateTime();
             @Data
             public static class LocalDateTime {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JodaLocalDateTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final LocalDate localDate = new LocalDate();
             @Data
             public static class LocalDate {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JodaLocalDateValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
 
             private final DateTime dateTime = new DateTime();
             @Data
             public static class DateTime {
-                // lower case
+                /**
+                 * Configures the formats understood by <code>JodaDateTimeValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format = "medium";
             }
         }
@@ -2715,12 +2910,24 @@ public class IsisConfiguration {
             private final Percentage percentage = new Percentage();
             @Data
             public static class Percentage {
+                /**
+                 * Configures the formats understood by <code>PercentageValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private String format;
             }
 
             private final Money money = new Money();
             @Data
             public static class Money {
+                /**
+                 * Configures the default currency code used by <code>MoneyValueSemanticsProvider</code>.
+                 *
+                 * @deprecated
+                 */
+                @Deprecated
                 private Optional<String> currency = Optional.empty();
             }
         }
@@ -2733,7 +2940,28 @@ public class IsisConfiguration {
         private final Cors cors = new Cors();
         @Data
         public static class Cors {
+            /**
+             * Which origins are allowed to make CORS requests.
+             *
+             * <p>
+             *     The default is the wildcard (&quot;*&quot;) but this can be made more restrictive if necessary.
+             * </p>
+             *
+             * <p>
+             *     For more information, check the usage of the <code>cors.allowed.origins</code> init parameter
+             *     for <a href="https://github.com/eBay/cors-filter">EBay CORSFilter</a>.
+             * </p>
+             */
             private List<String> allowedOrigins = listOf("*");
+
+            /**
+             * Which HTTP headers are allowed in a CORS request.
+             *
+             * <p>
+             *     For more information, check the usage of the <code>cors.allowed.headers</code> init parameter
+             *     for <a href="https://github.com/eBay/cors-filter">EBay CORSFilter</a>.
+             * </p>
+             */
             private List<String> allowedHeaders = listOf(
                     "Content-Type",
                     "Accept",
@@ -2744,7 +2972,25 @@ public class IsisConfiguration {
                     "Cache-Control",
                     "If-Modified-Since",
                     "Pragma");
+
+            /**
+             * Which HTTP methods are permitted in a CORS request.
+             *
+             * <p>
+             *     For more information, check the usage of the <code>cors.allowed.methods</code> init parameter
+             *     for <a href="https://github.com/eBay/cors-filter">EBay CORSFilter</a>.
+             * </p>
+             */
             private List<String> allowedMethods = listOf("GET","PUT","DELETE","POST","OPTIONS");
+
+            /**
+             * Which HTTP headers are exposed in a CORS request.
+             *
+             * <p>
+             *     For more information, check the usage of the <code>cors.exposed.headers</code> init parameter
+             *     for <a href="https://github.com/eBay/cors-filter">EBay CORSFilter</a>.
+             * </p>
+             */
             private List<String> exposedHeaders = listOf("Authorization");
         }
     }
diff --git a/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/webmodule/WebModuleCors.java b/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/webmodule/WebModuleCors.java
index 9521691..6ed6b60 100644
--- a/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/webmodule/WebModuleCors.java
+++ b/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/webmodule/WebModuleCors.java
@@ -66,29 +66,6 @@ public final class WebModuleCors extends WebModuleAbstract {
     }
 
 
-
-    /*
-    <filter>
-        <filter-name>CORS Filter</filter-name>
-        <filter-class>org.ebaysf.web.cors.CORSFilter</filter-class>
-        <init-param>
-            <param-name>cors.allowed.origins</param-name>
-            <param-value>*</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.allowed.headers</param-name>
-            <param-value>Content-Type,Accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Cache-Control,If-Modified-Since,Pragma</param-value>
-        </init-param>
-        <init-param>
-            <param-name>cors.exposed.headers</param-name>
-            <param-value>Authorization</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>CORS Filter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-     */
     @Override
     public Can<ServletContextListener> init(ServletContext ctx) throws ServletException {
 
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
index a5c3168..eb41bfa 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
@@ -20,6 +20,7 @@
 package org.apache.isis.viewer.wicket.viewer.wicketapp;
 
 import java.util.Collections;
+import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.function.Function;
@@ -346,11 +347,9 @@ IsisWebAppCommonContext.Provider {
      * protected visibility to allow ad-hoc overriding of some other authentication strategy.
      */
     IAuthenticationStrategy newAuthenticationStrategy(IsisConfiguration configuration) {
-        final String cookieKey = configuration.getViewer().getWicket().getRememberMe().getCookieKey();
-        String encryptionKey = configuration.getViewer().getWicket().getRememberMe().getEncryptionKey();
-        if (encryptionKey == null) {
-            encryptionKey = defaultEncryptionKey();
-        }
+        val rememberMe = configuration.getViewer().getWicket().getRememberMe();
+        val cookieKey = rememberMe.getCookieKey();
+        val encryptionKey = rememberMe.getEncryptionKey().orElse(defaultEncryptionKey());
         return new DefaultAuthenticationStrategy(cookieKey, encryptionKey);
     }
 


[isis] 04/11: ISIS-2264: removes remainder of WebAppConfiguration class

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 52be174a396afd4073d53fb74af9936ac75b5628
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 11:37:28 2020 +0000

    ISIS-2264: removes remainder of WebAppConfiguration class
    
    just call to WebAppContextPath where nec.
---
 .../isis/core/config/IsisModuleCoreConfig.java     |  2 -
 .../config/viewer/wicket/WebAppConfiguration.java  | 56 ----------------------
 .../menubars/MenuBarsLoaderServiceDefault.java     | 12 ++---
 .../wicket/ui/components/welcome/WelcomePanel.java |  4 +-
 .../ui/components/widgets/favicon/Favicon.java     |  8 ++--
 .../ui/components/widgets/navbar/BrandLogo.java    |  8 ++--
 .../ui/components/widgets/navbar/BrandName.java    | 10 ++--
 .../isis/viewer/wicket/ui/pages/WebPageBase.java   | 10 ++--
 .../accmngt/signup/RegistrationFormPanel.java      |  4 +-
 .../isis/viewer/wicket/ui/panels/PanelBase.java    | 12 ++---
 10 files changed, 33 insertions(+), 93 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
index 7b183a2..d0e09af 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.commons.IsisModuleCoreCommons;
 import org.apache.isis.core.config.beans.IsisBeanFactoryPostProcessorForSpring;
 import org.apache.isis.core.config.converters.PatternsConverter;
 import org.apache.isis.core.config.validators.PatternOptionalStringConstraintValidator;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 
 @Configuration
@@ -45,7 +44,6 @@ import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
     PatternOptionalStringConstraintValidator.class,
 
     // @Service's
-    WebAppConfiguration.class,
     WebAppContextPath.class,
 })
 @EnableConfigurationProperties({
diff --git a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
deleted file mode 100644
index 527f8c5..0000000
--- a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  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.core.config.viewer.wicket;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.core.config.IsisConfiguration;
-
-/**
- * @since 2.0 
- */
-@Service
-@Singleton
-@Named("isisConfig.WebAppConfiguration")
-@Order(OrderPrecedence.MIDPOINT)
-@Primary
-@Qualifier("Default")
-public class WebAppConfiguration {
-    
-    private final WebAppContextPath webAppContextPath;
-
-    @Inject
-    public WebAppConfiguration(
-            final WebAppContextPath webAppContextPath) {
-        this.webAppContextPath = webAppContextPath;
-    }
-
-    public String contextPathSensitive(String url) {
-        return webAppContextPath.prependContextPathIfLocal(url); 
-    }
-
-}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
index bffe94e..8337459 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
@@ -41,7 +41,7 @@ import org.apache.isis.applib.services.menu.MenuBarsLoaderService;
 import org.apache.isis.core.commons.internal.base._Strings;
 import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
@@ -115,18 +115,16 @@ public class MenuBarsLoaderServiceDefault implements MenuBarsLoaderService {
         }
 
         log.warn( 
-                String.format("Configured '%s' failes to provide a readable resource for "
-                        + "the Menubars-Layout.", 
-                        WebAppConfiguration.class.getName()));
+                String.format("'%s': could not find readable resource for the Menubars-Layout.",
+                        WebAppContextPath.class.getName()));
         warnedOnce = true; 
     }
 
     private void severeCannotLoad(Exception cause) {
 
         log.error(
-                String.format("Configured '%s' failes to provide a readable resource for "
-                        + "the Menubars-Layout.", 
-                        WebAppConfiguration.class.getName()), 
+                String.format("'%s': could not find readable resource for the Menubars-Layout.",
+                        WebAppContextPath.class.getName()),
                 cause);
     }
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
index 40924e8..8ce69c5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
@@ -23,7 +23,7 @@ import javax.inject.Inject;
 
 import org.apache.wicket.markup.html.basic.Label;
 
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 import org.apache.isis.viewer.wicket.model.models.WelcomeModel;
 import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -38,7 +38,7 @@ public class WelcomePanel extends PanelAbstract<WelcomeModel> {
 
     private static final String ID_MESSAGE = "message";
 
-    @Inject private transient WebAppConfiguration webAppConfigBean;
+    @Inject private transient WebAppContextPath webAppContextPath;
 
     public WelcomePanel(final String id, final WelcomeModel model) {
         super(id, model);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
index 036b1af..f4885cc 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
@@ -25,7 +25,7 @@ import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 
 /**
  * A component for application favorite icon
@@ -34,16 +34,16 @@ public class Favicon extends WebComponent {
 
     private static final long serialVersionUID = 1L;
 
-    @Inject private transient WebAppConfiguration webAppConfigBean;
     @Inject private transient IsisConfiguration isisConfiguration;
+    @Inject private transient WebAppContextPath webAppContextPath;
 
     private String url;
     private String contentType;
     
     public Favicon(String id) {
         super(id);
-        if(webAppConfigBean!=null) {
-            url = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getFaviconUrl());
+        if(webAppContextPath!=null) {
+            url = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getFaviconUrl());
             contentType = isisConfiguration.getViewer().getWicket().getApplication().getFaviconContentType();
         }
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
index 1debc11..ecf1b70 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
@@ -24,7 +24,7 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebComponent;
 
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 
 /**
  * A component used as a brand logo in the top-left corner of the navigation bar
@@ -35,8 +35,8 @@ public class BrandLogo extends WebComponent {
 
     private final Placement placement;
 
-    @Inject private transient WebAppConfiguration webAppConfigBean;
     @Inject private transient IsisConfiguration isisConfiguration;
+    @Inject private transient WebAppContextPath webAppContextPath;
 
     /**
      * Constructor.
@@ -63,8 +63,8 @@ public class BrandLogo extends WebComponent {
     }
 
     private String url() {
-        String logoHeaderUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader()) .getBrandLogoHeader();
-        String logoSigninUrl = webAppConfigBean.getBrandLogoSignin();
+        String logoHeaderUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
+        String logoSigninUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
 
         return placement.urlFor(logoHeaderUrl, logoSigninUrl);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
index 7b152ef..7f235cd 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
@@ -24,7 +24,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 
 /**
  * A component used as a brand logo in the top-left corner of the navigation bar
@@ -35,8 +35,8 @@ public class BrandName extends Label {
 
     private final Placement placement;
 
-    @Inject private transient WebAppConfiguration webAppConfigBean;
     @Inject private transient IsisConfiguration isisConfiguration;
+    @Inject private transient WebAppContextPath webAppContextPath;
 
     private String logoHeaderUrl;
     private String logoSigninUrl;
@@ -52,10 +52,10 @@ public class BrandName extends Label {
         super(id);
         this.placement = placement;
         
-        if(webAppConfigBean!=null) {
+        if(webAppContextPath!=null) {
             applicationName = isisConfiguration.getViewer().getWicket().getApplication().getName();
-            logoHeaderUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
-            logoSigninUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
+            logoHeaderUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
+            logoSigninUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
         }
 
         setDefaultModel(Model.of(applicationName));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
index b3084fc..6385a81 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/WebPageBase.java
@@ -23,10 +23,10 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 import org.apache.isis.core.runtime.session.IsisSessionFactory;
-import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 
 /**
  * Provides all the system dependencies for sub-classes.
@@ -36,8 +36,8 @@ public abstract class WebPageBase extends WebPage implements IsisWebAppCommonCon
 
     private static final long serialVersionUID = 1L;
     
-    private transient WebAppConfiguration webAppConfigBean;
     private transient IsisConfiguration isisConfiguration;
+    private transient WebAppContextPath webAppContextPath;
     private transient PageClassRegistry pageClassRegistry;
     private transient IsisWebAppCommonContext commonContext;
     private transient IsisSessionFactory isisSessionFactory;
@@ -59,8 +59,8 @@ public abstract class WebPageBase extends WebPage implements IsisWebAppCommonCon
         return isisConfiguration = computeIfAbsent(IsisConfiguration.class, isisConfiguration);
     }
 
-    public WebAppConfiguration getWebAppConfigBean() {
-        return webAppConfigBean = computeIfAbsent(WebAppConfiguration.class, webAppConfigBean);
+    public WebAppContextPath getWebAppContextPath() {
+        return webAppContextPath = computeIfAbsent(WebAppContextPath.class, webAppContextPath);
     }
     
     public PageClassRegistry getPageClassRegistry() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
index 3f35be0..4061450 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/signup/RegistrationFormPanel.java
@@ -34,7 +34,7 @@ import org.apache.wicket.validation.validator.EmailAddressValidator;
 
 import org.apache.isis.applib.services.userreg.EmailNotificationService;
 import org.apache.isis.applib.services.userreg.events.EmailRegistrationEvent;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.pages.EmailVerificationUrlService;
@@ -55,7 +55,7 @@ public class RegistrationFormPanel extends PanelBase<Void> {
     @Inject private transient EmailNotificationService emailNotificationService;
     @Inject private transient EmailVerificationUrlService emailVerificationUrlService;
     @Inject private transient PageNavigationService pageNavigationService;
-    @Inject private transient WebAppConfiguration webAppConfigBean;
+    @Inject private transient WebAppContextPath webAppContextPath;
 
     /**
      * Constructor
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
index 757462b..c7caf3b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelBase.java
@@ -29,10 +29,11 @@ import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.userreg.EmailNotificationService;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
+import org.apache.isis.core.config.viewer.wicket.WebAppContextPath;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.runtime.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.MessageBroker;
+import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -44,7 +45,6 @@ import org.apache.isis.viewer.wicket.ui.components.tree.themes.TreeThemeProvider
 import org.apache.isis.viewer.wicket.ui.pages.EmailVerificationUrlService;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageNavigationService;
-import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 
 /**
  * Provides the <em>common context</em> for all implementing sub-classes.
@@ -55,7 +55,7 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
     private static final long serialVersionUID = 1L;
 
     private transient WicketViewerSettings wicketViewerSettings;
-    private transient WebAppConfiguration webAppConfigBean;
+    private transient WebAppContextPath webAppContextPath;
     private transient IsisConfiguration isisConfiguration;
     private transient PageClassRegistry pageClassRegistry;
     private transient ImageResourceCache imageCache;
@@ -86,9 +86,9 @@ public class PanelBase<T> extends GenericPanel<T> implements IsisWebAppCommonCon
     public WicketViewerSettings getWicketViewerSettings() {
         return wicketViewerSettings = computeIfAbsent(WicketViewerSettings.class, wicketViewerSettings);
     }
-    
-    public WebAppConfiguration getWebAppConfigBean() {
-        return webAppConfigBean = computeIfAbsent(WebAppConfiguration.class, webAppConfigBean);
+
+    public WebAppContextPath getWebAppContextPath() {
+        return webAppContextPath = computeIfAbsent(WebAppContextPath.class, webAppContextPath);
     }
     
     public IsisConfiguration getIsisConfiguration() {


[isis] 10/11: ISIS-2264: more on cfg docs, changing some further to Optional

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit cacabf42d97b8d66c15347a72dff39dd50589848
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 15:48:29 2020 +0000

    ISIS-2264: more on cfg docs, changing some further to Optional
---
 .../config/examples/generated/isis.applib.adoc     | 110 ++++++++++-----------
 .../isis.core.meta-model.introspector.adoc         |   2 +-
 .../generated/isis.core.meta-model.validator.adoc  |   8 +-
 .../generated/isis.core.runtime-services.adoc      |   2 +-
 .../generated/isis.viewer.restfulobjects.adoc      |   2 +-
 .../examples/generated/isis.viewer.wicket.adoc     |   8 +-
 .../config/pages/configuration-properties.adoc     |  11 ++-
 .../apache/isis/core/config/IsisConfiguration.java |  28 +++---
 .../additional-spring-configuration-metadata.json  |   7 +-
 scripts/generateConfigDocs.groovy                  |   4 +-
 .../ui/components/widgets/navbar/BrandLogo.java    |  13 ++-
 .../ui/components/widgets/navbar/BrandName.java    |  19 ++--
 12 files changed, 125 insertions(+), 89 deletions(-)

diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
index e8454b3..3a010de 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
@@ -23,23 +23,23 @@ The CSS class for individual actions can be overridden using `org.apache.isis.ap
 | isis.applib.annotation.action. +
 command
 | 
-| The default for whether action invocations should be reified as a using the `org.apache.isis.applib.services.command.spi.CommandService, possibly so that the actual execution of the action can be deferred until later (background execution) or replayed against a copy of the system.
+| The default for whether action invocations should be reified as a `org.apache.isis.applib.services.command.Command` using the `org.apache.isis.applib.services.command.spi.CommandService`, possibly so that the actual execution of the action can be deferred until later (background execution) or replayed against a copy of the system.
 
-In particular, the implementation of \{@link org.apache.isis.applib.services.command.Command represents the action invocation memento (obtained using as a \{@link org.apache.isis.schema.cmd.v2.CommandDto.
+In particular, the `org.apache.isis.applib.services.command.CommandWithDto` implementation of `org.apache.isis.applib.services.command.Command` represents the action invocation memento (obtained using `CommandWithDto#asDto()`) as a `org.apache.isis.schema.cmd.v2.CommandDto`.
 
-This setting can be overridden on a case-by-case basis using \{@link org.apache.isis.applib.annotation.Action#command()`.
+This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#command()`.
 
 
 | isis.applib.annotation.action. +
 domain-event.post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever an action is being interacted with.
+| Influences whether an `org.apache.isis.applib.events.domain.ActionDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever an action is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the for the action in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Action#domainEvent()` for the action in question:
 
-* If set to some subtype of \{@link org.apache.isis.applib.events.domain.ActionDomainEvent.Noop ActionDomainEvent.Noop, then _no_ event is sent.
+* If set to some subtype of ActionDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of ActionDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
 * If set to any other subtype, then an event _is_ sent.
 
@@ -53,11 +53,11 @@ explicit
 | isis.applib.annotation.action. +
 publishing
 | 
-| The default for whether action invocations should be sent through to the for publishing.
+| The default for whether action invocations should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
 
-The service's \{@link org.apache.isis.applib.services.publish.PublisherService#publish(Interaction.Execution) publish method is called only once per transaction, with collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
+The service's publish method is called only once per transaction, with `org.apache.isis.applib.services.iactn.Interaction.Execution` collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
 
-This setting can be overridden on a case-by-case basis using \{@link org.apache.isis.applib.annotation.Action#publishing().
+This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#publishing()`.
 
 
 | isis.applib.annotation. +
@@ -81,13 +81,13 @@ This can be overridden on a case-by-case basis using `org.apache.isis.applib.ann
 collection.domain-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a collection is being interacted with.
+| Influences whether an `org.apache.isis.applib.events.domain.CollectionDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a collection is being interacted with.
 
 Up to two different events can be fired during an interaction, with the event's phase determining which (hide, disable)Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the for the collection action in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Collection#domainEvent()` for the collection action in question:
 
-* If set to some subtype of \{@link org.apache.isis.applib.events.domain.CollectionDomainEvent.Noop CollectionDomainEvent.Noop, then _no_ event is sent.
+* If set to some subtype of CollectionDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CollectionDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
 * If set to any other subtype, then an event _is_ sent.
 
@@ -97,9 +97,9 @@ domain-object-layout. +
 css-class-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally change) the CSS classes that are used.
+| Influences whether an `org.apache.isis.applib.events.ui.CssClassUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)` change) the CSS classes that are used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.DomainObjectLayout#cssClassUiEvent() @DomainObjectLayout(cssClassEvent=...)` for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#cssClassUiEvent()` @DomainObjectLayout(cssClassEvent=...)} for the domain object in question.
 
 * If set to some subtype of CssClassUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CssClassUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -111,9 +111,9 @@ domain-object-layout. +
 icon-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally change) the icon that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.IconUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)` change) the icon that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.DomainObjectLayout#iconUiEvent() @DomainObjectLayout(iconEvent=...)` for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#iconUiEvent()` @DomainObjectLayout(iconEvent=...)} for the domain object in question.
 
 * If set to some subtype of IconUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of IconUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -125,11 +125,11 @@ domain-object-layout. +
 layout-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally change) the layout that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.LayoutUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)` change) the layout that is used.
 
 If a different layout value has been set, then a layout in the form `Xxx.layout-zzz.xml` use used (where `zzz` is the name of the layout).
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.DomainObjectLayout#layoutUiEvent() @DomainObjectLayout(layoutEvent=...)` for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#layoutUiEvent()` @DomainObjectLayout(layoutEvent=...)} for the domain object in question.
 
 * If set to some subtype of LayoutUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of LayoutUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -149,9 +149,9 @@ domain-object-layout. +
 title-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally change) the title that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.TitleUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)` change) the title that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.DomainObjectLayout#titleUiEvent() @DomainObjectLayout(titleEvent=...)` for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#titleUiEvent()` @DomainObjectLayout(titleEvent=...)} for the domain object in question.
 
 * If set to some subtype of TitleUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of TitleUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -161,9 +161,9 @@ The algorithm for determining whether (and what type of) an event is sent depend
 | isis.applib.annotation. +
 domain-object.auditing
 | 
-| The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to the
+| The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to the `org.apache.isis.applib.services.audit.AuditerService`.
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObject#auditing() DomainObject#getAuditing()`
+This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObject#auditing()` DomainObject#getAuditing()}
 
 Note: this applies only to domain entities, not view models.
 
@@ -173,9 +173,9 @@ domain-object. +
 created-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain object has been created using
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object has been created using `org.apache.isis.applib.services.factory.FactoryService`.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.DomainObject#createdLifecycleEvent() @DomainObject(createdLifecycleEvent=...) for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(createdLifecycleEvent=...) for the domain object in question.
 
 * If set to some subtype of ObjectCreatedEvent.Noop, then _no_ event is sent.
 * If set to some subtype of ObjectCreatedEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -195,7 +195,7 @@ domain-object. +
 loaded-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain _entity_ has been loaded from the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ has been loaded from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(loadedLifecycleEvent=...) for the domain object in question.
 
@@ -211,7 +211,7 @@ domain-object. +
 persisted-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistedLifecycleEvent=...) for the domain object in question.
 
@@ -227,7 +227,7 @@ domain-object. +
 persisting-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistingLifecycleEvent=...) for the domain object in question.
 
@@ -241,11 +241,11 @@ Note: this applies only to domain entities, not to view models.
 | isis.applib.annotation. +
 domain-object.publishing
 | 
-| The default for whether the identities of changed objects should be sent through to the for publishing.
+| The default for whether the identities of changed objects should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
 
-The service's \{@link org.apache.isis.applib.services.publish.PublisherService#publish(PublishedObjects) publish method is called only once per transaction, with collecting details of all changed domain objects.
+The service's publish method is called only once per transaction, with `PublishedObjects` collecting details of all changed domain objects.
 
-This setting can be overridden on a case-by-case basis using \{@link org.apache.isis.applib.annotation.DomainObject#publishing().
+This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObject#publishing()`.
 
 
 | isis.applib.annotation. +
@@ -253,7 +253,7 @@ domain-object. +
 removing-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(removingLifecycleEvent=...) for the domain object in question.
 
@@ -271,7 +271,7 @@ domain-object. +
 updated-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a persistent domain _entity_ has been updated in the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ has been updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatedLifecycleEvent=...) for the domain object in question.
 
@@ -287,7 +287,7 @@ domain-object. +
 updating-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever a persistent domain _entity_ is about to be updated in the persistence store.
+| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ is about to be updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatingLifecycleEvent=...) for the domain object in question.
 
@@ -304,9 +304,9 @@ label-position
 | 
 | Defines the default position for the label for an action parameter.
 
-Can be overridden on a case-by-case basis using
+Can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.ParameterLayout#labelPosition()`.
 
-If left as \{@link LabelPosition#NOT_SPECIFIED and not overridden, then the position depends upon the viewer implementation.
+If left as `LabelPosition#NOT_SPECIFIED` and not overridden, then the position depends upon the viewer implementation.
 
 
 | isis.applib.annotation. +
@@ -315,32 +315,32 @@ label-position
 | 
 | Defines the default position for the label for a domain object property.
 
-Can be overridden on a case-by-case basis using
+Can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.ParameterLayout#labelPosition()`.
 
-If left as \{@link LabelPosition#NOT_SPECIFIED and not overridden, then the position depends upon the viewer implementation.
+If left as `LabelPosition#NOT_SPECIFIED` and not overridden, then the position depends upon the viewer implementation.
 
 
 | isis.applib.annotation. +
 property.command
 | 
-| The default for whether property edits should be reified as a using the `org.apache.isis.applib.services.command.spi.CommandService, possibly so that the actual execution of the property edit can be deferred until later (background execution) or replayed against a copy of the system.
+| The default for whether property edits should be reified as a `org.apache.isis.applib.services.command.Command` using the `org.apache.isis.applib.services.command.spi.CommandService`, possibly so that the actual execution of the property edit can be deferred until later (background execution) or replayed against a copy of the system.
 
-In particular, the implementation of \{@link org.apache.isis.applib.services.command.Command represents the action invocation memento (obtained using as a \{@link org.apache.isis.schema.cmd.v2.CommandDto.
+In particular, the `org.apache.isis.applib.services.command.CommandWithDto` implementation of `org.apache.isis.applib.services.command.Command` represents the action invocation memento (obtained using `CommandWithDto#asDto()`) as a `org.apache.isis.schema.cmd.v2.CommandDto`.
 
-This setting can be overridden on a case-by-case basis using \{@link org.apache.isis.applib.annotation.Action#command()`.
+This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#command()`.
 
 
 | isis.applib.annotation. +
 property.domain-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal \{@link org.apache.isis.applib.services.eventbus.EventBusService) whenever an property is being interacted with.
+| Influences whether an `org.apache.isis.applib.events.domain.PropertyDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever an property is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the for the property in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Property#domainEvent()` for the property in question:
 
-* If set to some subtype of \{@link org.apache.isis.applib.events.domain.PropertyDomainEvent.Noop propertyDomainEvent.Noop, then _no_ event is sent.
+* If set to some subtype of propertyDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of propertyDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
 * If set to any other subtype, then an event _is_ sent.
 
@@ -348,11 +348,11 @@ The algorithm for determining whether (and what type of) an event is actually se
 | isis.applib.annotation. +
 property.publishing
 | 
-| The default for whether property edits should be sent through to the for publishing.
+| The default for whether property edits should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
 
-The service's \{@link org.apache.isis.applib.services.publish.PublisherService#publish(Interaction.Execution) publish method is called only once per transaction, with collecting details of the identity of the target object, the property edited, and the new value of the property.
+The service's publish method is called only once per transaction, with `org.apache.isis.applib.services.iactn.Interaction.Execution` collecting details of the identity of the target object, the property edited, and the new value of the property.
 
-This setting can be overridden on a case-by-case basis using \{ @link org.apache.isis.applib.annotation.Property#publishing().
+This setting can be overridden on a case-by-case basis using \{ @link org.apache.isis.applib.annotation.Property#publishing()}.
 
 
 | isis.applib.annotation. +
@@ -360,9 +360,9 @@ view-model-layout. +
 css-class-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally change) the CSS classes that are used.
+| Influences whether an `org.apache.isis.applib.events.ui.CssClassUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)` change) the CSS classes that are used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.ViewModelLayout#cssClassUiEvent() @ViewModelLayout(cssClassEvent=...)` for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#cssClassUiEvent()` @ViewModelLayout(cssClassEvent=...)} for the domain object in question:
 
 * If set to some subtype of CssClassUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CssClassUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -374,9 +374,9 @@ view-model-layout. +
 icon-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally change) the icon that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.IconUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)` change) the icon that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.ViewModelLayout#iconUiEvent() @ViewModelLayout(iconEvent=...)` for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#iconUiEvent()` @ViewModelLayout(iconEvent=...)} for the domain object in question:
 
 * If set to some subtype of IconUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of IconUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -388,11 +388,11 @@ view-model-layout. +
 layout-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally change) the layout that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.LayoutUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)` change) the layout that is used.
 
 If a different layout value has been set, then a layout in the form `Xxx.layout-zzz.xml` use used (where `zzz` is the name of the layout).
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.ViewModelLayout#layoutUiEvent() @ViewModelLayout(layoutEvent=...)` for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#layoutUiEvent()` @ViewModelLayout(layoutEvent=...)} for the domain object in question:
 
 * If set to some subtype of LayoutUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of LayoutUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -404,9 +404,9 @@ view-model-layout. +
 title-ui-event. +
 post-for-default
 |  true
-| Influences whether an should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally change) the title that is used.
+| Influences whether an `org.apache.isis.applib.events.ui.TitleUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)` change) the title that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the \{@link org.apache.isis.applib.annotation.ViewModelLayout#titleUiEvent() @ViewModelLayout(titleEvent=...)` for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#titleUiEvent()` @ViewModelLayout(titleEvent=...)} for the domain object in question:
 
 * If set to some subtype of TitleUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of TitleUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -417,6 +417,6 @@ The algorithm for determining whether (and what type of) an event is sent depend
 view-model.validation. +
 semantic-checking.enable
 | 
-| Whether to check for inconsistencies between the usage of \{@link org.apache.isis.applib.annotation.ViewModel, and \{@link org.apache.isis.applib.annotation.ViewModelLayout.
+| Whether to check for inconsistencies between the usage of `org.apache.isis.applib.annotation.DomainObject`, `org.apache.isis.applib.annotation.ViewModel`, `org.apache.isis.applib.annotation.DomainObjectLayout` and `org.apache.isis.applib.annotation.ViewModelLayout`.
 
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
index 9534929..8773d2e 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
@@ -4,7 +4,7 @@ lock-after-full-introspection
 |  true
 | If true, then no new specifications will be allowed to be loaded once introspection has been complete.
 
-Only applies if the introspector is configured to perform full introspection up-front (either because of or \{@link IntrospectionMode#LAZY_UNLESS_PRODUCTION when in production); otherwise is ignored.
+Only applies if the introspector is configured to perform full introspection up-front (either because of `IntrospectionMode#FULL` or `IntrospectionMode#LAZY_UNLESS_PRODUCTION` when in production); otherwise is ignored.
 
 
 | isis.core.meta-model. +
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
index 67e14ac..8943250 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
@@ -25,18 +25,18 @@ validator.check-module-extent
 validator. +
 ensure-unique-object-types
 |  true
-| Whether to ensure that the object type of all objects (which can be set either explicitly using or `DomainService#objectType(), or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
+| Whether to ensure that the object type of all objects (which can be set either explicitly using `DomainObject#objectType()` or `DomainService#objectType()`, or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
 
-It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see \{@link #isExplicitObjectType()`.
+It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see `#isExplicitObjectType()`.
 
 
 | isis.core.meta-model. +
 validator. +
 explicit-object-type
 | 
-| Whether to ensure that the object type of all objects must be specified explicitly, using either or `DomainService#objectType().
+| Whether to ensure that the object type of all objects must be specified explicitly, using either `DomainObject#objectType()` or `DomainService#objectType()`.
 
-It is _highly advisable_ to leave this set as enabled (the default). These object types should also (of course) be unique - that can be checked by setting the \{@link #isEnsureUniqueObjectTypes()` config property.
+It is _highly advisable_ to leave this set as enabled (the default). These object types should also (of course) be unique - that can be checked by setting the `#isEnsureUniqueObjectTypes()` config property.
 
 
 | isis.core.meta-model. +
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
index 82076b4..88d149b 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
@@ -1,7 +1,7 @@
 | isis.core.runtime-services. +
 application-features.init
 | 
-| Whether the (or the default implementation of that service, at least) should compute the set of `ApplicationFeature` that describe the metamodel \{@link ApplicationFeaturesInitConfiguration#EAGERLY eagerly, or lazily.
+| Whether the `org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository` (or the default implementation of that service, at least) should compute the set of `ApplicationFeature` that describe the metamodel eagerly, or lazily.
 
 
 | isis.core.runtime-services. +
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
index 9dc2e2f..abbc31b 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
@@ -1,7 +1,7 @@
 | isis.viewer.restfulobjects. +
 base-uri
 | 
-| If left unset (the default), then the RO viewer will use the injected using @link javax.ws.rs.core.Context) to figure out the base Uri (used to render `href`s).
+| If left unset (the default), then the RO viewer will use the `javax.ws.rs.core.UriInfo` injected using @link javax.ws.rs.core.Context}) to figure out the base Uri (used to render `href`s).
 
 This will be correct much of the time, but will almost certainly be wrong if there is a reverse proxy.
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
index 756f59d..d9c0f64 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
@@ -167,7 +167,7 @@ date-time-pattern
 |  dd-MM-yyyy HH:mm
 | The pattern used for rendering and parsing date/times.
 
-Each Date scalar panel will use or \{@link Wicket#getDateTimePattern() depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
+Each Date scalar panel will use `Wicket#getDatePattern()` or `Wicket#getDateTimePattern()` depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
 
 
 | isis.viewer.wicket. +
@@ -217,7 +217,7 @@ standalone-tables
 | isis.viewer.wicket. +
 max-title-length-in-tables
 |  12
-| The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either or \{@link #getMaxTitleLengthInStandaloneTables().
+| The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either `#getMaxTitleLengthInParentedTables()` or `#getMaxTitleLengthInStandaloneTables()`.
 
 If truncated, then the remainder of the title will be replaced with ellipses (...).
 
@@ -312,7 +312,7 @@ suppress-password-reset
 | 
 | Whether to suppress the password reset link on the sign-in page.
 
-Although this is disabled by default (in other words the 'reset password' link is not suppressed), note that in addition the application must provide an implementation of the as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService (same conditions as for the \{@link #isSuppressSignUp()` sign-up link).
+Although this is disabled by default (in other words the 'reset password' link is not suppressed), note that in addition the application must provide an implementation of the `org.apache.isis.applib.services.userreg.UserRegistrationService` as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService` (same conditions as for the `#isSuppressSignUp()` sign-up link).
 
 
 | isis.viewer.wicket. +
@@ -320,7 +320,7 @@ suppress-sign-up
 | 
 | Whether to suppress the sign-up link on the sign-in page.
 
-Although this is disabled by default (in other words the sign-up link is not suppressed), note that in addition the application must provide an implementation of the as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService (same conditions as for the \{@link #isSuppressPasswordReset()` password reset link).
+Although this is disabled by default (in other words the sign-up link is not suppressed), note that in addition the application must provide an implementation of the `org.apache.isis.applib.services.userreg.UserRegistrationService` as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService` (same conditions as for the `#isSuppressPasswordReset()` password reset link).
 
 
 | isis.viewer.wicket.themes. +
diff --git a/core/config/src/main/adoc/modules/config/pages/configuration-properties.adoc b/core/config/src/main/adoc/modules/config/pages/configuration-properties.adoc
index 191b96b..f2e97a5 100644
--- a/core/config/src/main/adoc/modules/config/pages/configuration-properties.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/configuration-properties.adoc
@@ -111,7 +111,16 @@ include::refguide:config:example$generated/isis.persistence.jdo-datanucleus.adoc
 
 
 
-== JDO DataNucleus Persistence Pass-thru Settings
+== JDO DN Pass-thru
+
+The values of these configuration properties are passed through unchanged, with the `isis.persistence.jdo-datanucleus.impl` prefix stripped off.
+
+[NOTE]
+====
+Configuration properties keys under `datanucleus` need to be specified in `camelCase`.
+
+Configuration properties keys under `javax.jdo.option` need to be specified in `PascalCase`.
+====
 
 [cols="2a,2a,3a", options="header"]
 |===
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 5a7cefe..9ad6b95 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -1975,7 +1975,7 @@ public class IsisConfiguration {
 
             /**
              * If left unset (the default), then the RO viewer will use the {@link javax.ws.rs.core.UriInfo}
-             * injected using  @link javax.ws.rs.core.Context}) to figure out the base Uri (used to render
+             * (injected using {@link javax.ws.rs.core.Context}) to figure out the base Uri (used to render
              * <code>href</code>s).
              *
              * <p>
@@ -2007,8 +2007,8 @@ public class IsisConfiguration {
         public static class Wicket {
 
             /**
-             * Specifies the subclass of <
-             * code>org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication</code> that is used to
+             * Specifies the subclass of
+             * <code>org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication</code> that is used to
              * bootstrap Wicket.
              *
              * <p>
@@ -2056,11 +2056,13 @@ public class IsisConfiguration {
              * The pattern used for rendering and parsing date/times.
              *
              * <p>
-             * Each Date scalar panel will use {@link Wicket#getDatePattern()} or {@link Wicket#getDateTimePattern()} depending on its
-             * date type.  In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be
+             * Each Date scalar panel will use {@link Wicket#getDatePattern()} or {@link Wicket#getDateTimePattern()}
+             * depending on its date type.  In the case of panels with a date time picker, the pattern will be
+             * dynamically adjusted so that it can be
              * used by the <a href="https://github.com/Eonasdan/bootstrap-datetimepicker">Bootstrap Datetime Picker</a>
              * component (which uses <a href="http://momentjs.com/docs/#/parsing/string-format/">Moment.js formats</a>, rather
              * than those of regular Java code).
+             * </p>
              */
             @NotNull @NotEmpty
             private String dateTimePattern = "dd-MM-yyyy HH:mm";
@@ -2308,15 +2310,18 @@ public class IsisConfiguration {
                  * If not specified, the application.name is used instead.
                  * </p>
                  */
-                private String brandLogoHeader;
+                private Optional<String> brandLogoHeader = Optional.empty();
                 
                 /**
                  * Either the location of the image file (relative to the class-path resource root), 
-                 * or an absolute URL. 
-                 * This is rendered on the sign-in page. An image with a size of 400x40 works well. 
-                 * If not specified, the {@link Application#name} is used instead.
+                 * or an absolute URL.
+                 *
+                 * <p>
+                 * This is rendered on the sign-in page. An image with a size of 400x40 works well.
+                 * If not specified, the {@link Application#getName() application name} is used instead.
+                 * </p>
                  */
-                private String brandLogoSignin;
+                private Optional<String> brandLogoSignin = Optional.empty();
                 
                 /**
                  * URL of file to read any custom CSS, relative to <code>static</code> package on the class path.
@@ -2507,7 +2512,8 @@ public class IsisConfiguration {
             public static class DevelopmentUtilities {
 
                 /**
-                 * Determines whether debug bar and other stuff influenced by <tt>org.apache.wicket.settings.DebugSettings#isDevelopmentUtilitiesEnabled()</tt> is enabled or not.
+                 * Determines whether debug bar and other stuff influenced by
+                 * <code>DebugSettings#isDevelopmentUtilitiesEnabled()</code> is enabled or not.
                  *
                  * <p>
                  *     By default, depends on the mode (prototyping = enabled, server = disabled).  This property acts as an override.
diff --git a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index fd56d0c..e83d489 100644
--- a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -58,7 +58,12 @@
     },
     {
       "name": "isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionDriverName",
-      "type": "java.lang.String"
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "java.sql.Driver"
+        }
+      }]
     },
     {
       "name": "isis.persistence.jdo-datanucleus.impl.javax.jdo.option.ConnectionURL",
diff --git a/scripts/generateConfigDocs.groovy b/scripts/generateConfigDocs.groovy
index 257f59e..843166f 100644
--- a/scripts/generateConfigDocs.groovy
+++ b/scripts/generateConfigDocs.groovy
@@ -261,8 +261,8 @@ System.out.println("");
 static String toAsciidoc(String str) {
 
     System.out.print(".");
-    str = str.replaceAll( /\{@link[ ]+?(.+?)[ ]+(.+?)[ ]*?}/, '$2')
-    str = str.replaceAll( /\{@link[ ]+?(.+?)[ ]*?}/, '`$1`')
+    str = str.replaceAll( /\{@link[ ]+?([^}]+?)[ ]+?([^}]+?)[ ]*?}/, '$2')
+    str = str.replaceAll( /\{@link[ ]+?([^}]+?)[ ]*?}/, '`$1`')
 
     File tf = File.createTempFile("input",".html")
     tf.write(str)   // write to the file
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
index ecf1b70..b8b00ac 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.navbar;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 
 import org.apache.wicket.markup.ComponentTag;
@@ -63,8 +65,15 @@ public class BrandLogo extends WebComponent {
     }
 
     private String url() {
-        String logoHeaderUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
-        String logoSigninUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
+        final String logoHeaderUrl =
+                isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader()
+                    .map(webAppContextPath::prependContextPathIfLocal)
+                    .orElse(null);
+
+        String logoSigninUrl =
+                isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin()
+                    .map(webAppContextPath::prependContextPathIfLocal)
+                    .orElse(null);
 
         return placement.urlFor(logoHeaderUrl, logoSigninUrl);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
index 7f235cd..9d2e357 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
@@ -52,12 +52,6 @@ public class BrandName extends Label {
         super(id);
         this.placement = placement;
         
-        if(webAppContextPath!=null) {
-            applicationName = isisConfiguration.getViewer().getWicket().getApplication().getName();
-            logoHeaderUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
-            logoSigninUrl = webAppContextPath.prependContextPathIfLocal(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
-        }
-
         setDefaultModel(Model.of(applicationName));
     }
 
@@ -65,6 +59,19 @@ public class BrandName extends Label {
     protected void onConfigure() {
         super.onConfigure();
 
+        if(webAppContextPath != null && isisConfiguration != null) {
+
+            applicationName = isisConfiguration.getViewer().getWicket().getApplication().getName();
+            logoHeaderUrl =
+                    isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader()
+                        .map(webAppContextPath::prependContextPathIfLocal)
+                        .orElse(null);
+            logoSigninUrl =
+                    isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin()
+                        .map(webAppContextPath::prependContextPathIfLocal)
+                        .orElse(null);
+        }
+
         setVisible(placement.urlFor(logoHeaderUrl, logoSigninUrl) == null);
     }
 }


[isis] 03/11: ISIS-2264: removes all of WebAppConfiguration state, just use IsisConfiguration

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 67253f37e5966bf30d0be7f69f9d625657dae39d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 11:29:02 2020 +0000

    ISIS-2264: removes all of WebAppConfiguration state, just use IsisConfiguration
    
    WebAppConfiguration remains just as a utility bean to make certain URLs context sensitive
---
 .../apache/isis/core/config/IsisConfiguration.java |  2 +
 .../config/viewer/wicket/WebAppConfiguration.java  | 65 +---------------------
 .../menubars/MenuBarsLoaderServiceDefault.java     | 42 +++++++-------
 .../wicket/ui/components/welcome/WelcomePanel.java |  2 +-
 .../ui/components/widgets/favicon/Favicon.java     |  2 +-
 .../ui/components/widgets/navbar/BrandLogo.java    |  6 +-
 .../ui/components/widgets/navbar/BrandName.java    |  4 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  4 +-
 .../accmngt/AccountManagementPageAbstract.java     |  4 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |  4 +-
 10 files changed, 40 insertions(+), 95 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 91bd5ac..e4ead26 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2327,6 +2327,7 @@ public class IsisConfiguration {
                  *     Spring by default under <code>static</code> package).
                  * </p>
                  */
+                @javax.validation.constraints.Pattern(regexp="^[^/].*$")
                 private String css;
                 
                 // since 2.0
@@ -2346,6 +2347,7 @@ public class IsisConfiguration {
                  *     Spring by default under <code>static</code> package).
                  * </p>
                  */
+                @javax.validation.constraints.Pattern(regexp="^[^/].*$")
                 private String js;
 
                 /**
diff --git a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
index 14b5de9..527f8c5 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/viewer/wicket/WebAppConfiguration.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.config.viewer.wicket;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
@@ -26,16 +25,11 @@ import javax.inject.Singleton;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.annotation.Order;
-import org.springframework.core.io.AbstractResource;
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.core.config.IsisConfiguration;
 
-import lombok.Getter;
-import lombok.val;
-
 /**
  * @since 2.0 
  */
@@ -47,73 +41,16 @@ import lombok.val;
 @Qualifier("Default")
 public class WebAppConfiguration {
     
-    private final IsisConfiguration isisConfiguration;
     private final WebAppContextPath webAppContextPath;
 
-    @Getter private AbstractResource menubarsLayoutXml;
-    
-    // URLs *not* sensitive to context path (remove any leading /)
-    @Getter private String applicationCss;
-    @Getter private String applicationJs;
-    @Getter private String welcomeMessage;
-
-    // URLs sensitive to context path (add context-path)
-    @Getter private String faviconUrl;
-    @Getter private String brandLogoHeader;
-    @Getter private String brandLogoSignin;
-
     @Inject
     public WebAppConfiguration(
-            final IsisConfiguration isisConfiguration,
             final WebAppContextPath webAppContextPath) {
-        this.isisConfiguration = isisConfiguration;
         this.webAppContextPath = webAppContextPath;
     }
 
-    @PostConstruct
-    public void init() {
-
-        this.menubarsLayoutXml = lookup(getIsisConfiguration().getViewer().getWicket().getApplication().getMenubarsLayoutXml());
-        
-        this.applicationCss = ignoreLeadingSlash(getIsisConfiguration().getViewer().getWicket().getApplication().getCss());
-        this.applicationJs = ignoreLeadingSlash(getIsisConfiguration().getViewer().getWicket().getApplication().getJs());
-
-        this.brandLogoHeader = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getBrandLogoHeader());
-        this.brandLogoSignin = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getBrandLogoSignin());
-        this.faviconUrl = contextPathSensitive(getIsisConfiguration().getViewer().getWicket().getApplication().getFaviconUrl());
-        
-        val welcome = getIsisConfiguration().getViewer().getWicket().getWelcome();
-        
-        this.welcomeMessage = ignoreLeadingSlash(welcome.getText());
-
-    }
-
-    private IsisConfiguration getIsisConfiguration() {
-        return isisConfiguration;
-    }
-
-
-    // -- HELPER
-
-    private String contextPathSensitive(String url) {
+    public String contextPathSensitive(String url) {
         return webAppContextPath.prependContextPathIfLocal(url); 
     }
-    
-    private String ignoreLeadingSlash(String url) {
-        if(url==null || url.length()<2) {
-            return url;
-        }
-        return url.startsWith("/")
-                ? url.substring(1)
-                        : url;
-    }
-    
-    private ClassPathResource lookup(String path) {
-        if(path == null) {
-            return lookup("menubars.layout.xml"); // try lookup default name
-        }
-        return new ClassPathResource(path);
-    }
-    
 
 }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
index e553226..bffe94e 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
@@ -23,12 +23,15 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.annotation.Order;
 import org.springframework.core.io.AbstractResource;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
@@ -37,6 +40,7 @@ import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.menu.MenuBarsLoaderService;
 import org.apache.isis.core.commons.internal.base._Strings;
 import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 
 import lombok.val;
@@ -50,10 +54,23 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class MenuBarsLoaderServiceDefault implements MenuBarsLoaderService {
 
-    @Inject private IsisSystemEnvironment isisSystemEnvironment;
-    @Inject private JaxbService jaxbService;
-    @Autowired(required = false) private WebAppConfiguration webAppConfigBean;
-    
+    private final IsisSystemEnvironment isisSystemEnvironment;
+    private final JaxbService jaxbService;
+
+    private final ClassPathResource menubarsLayoutXmlResource;
+
+    @Inject
+    public MenuBarsLoaderServiceDefault(
+            final IsisSystemEnvironment isisSystemEnvironment,
+            final JaxbService jaxbService,
+            final IsisConfiguration isisConfiguration) {
+        this.isisSystemEnvironment = isisSystemEnvironment;
+        this.jaxbService = jaxbService;
+
+        this.menubarsLayoutXmlResource =
+                new ClassPathResource(isisConfiguration.getViewer().getWicket().getApplication().getMenubarsLayoutXml());
+    }
+
     @Override
     public boolean supportsReloading() {
         return isisSystemEnvironment.isPrototyping();
@@ -62,17 +79,8 @@ public class MenuBarsLoaderServiceDefault implements MenuBarsLoaderService {
     @Override
     public BS3MenuBars menuBars() {
 
-        val menubarsLayoutResource = Optional.ofNullable(webAppConfigBean)
-                .map(WebAppConfiguration::getMenubarsLayoutXml)
-                .orElse(null);
-
-        if(menubarsLayoutResource==null) {
-            warnNotFound();
-            return null;
-        }
-
-        val xmlString = loadMenubarsLayoutResource(menubarsLayoutResource);
-        if(xmlString==null) {
+        val xmlString = loadMenubarsLayoutResource(menubarsLayoutXmlResource);
+        if(xmlString == null) {
             warnNotFound();
             return null;
         }
@@ -121,9 +129,5 @@ public class MenuBarsLoaderServiceDefault implements MenuBarsLoaderService {
                         WebAppConfiguration.class.getName()), 
                 cause);
     }
-
-    
-
-    
 }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
index ae4a15d..40924e8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/welcome/WelcomePanel.java
@@ -43,7 +43,7 @@ public class WelcomePanel extends PanelAbstract<WelcomeModel> {
     public WelcomePanel(final String id, final WelcomeModel model) {
         super(id, model);
 
-        String welcomeMessage = webAppConfigBean.getWelcomeMessage();
+        String welcomeMessage = getIsisConfiguration().getViewer().getWicket().getWelcome().getText();
 
         model.setObject(welcomeMessage);
         final Label label = new Label(ID_MESSAGE, welcomeMessage);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
index 8081f84..036b1af 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/favicon/Favicon.java
@@ -43,7 +43,7 @@ public class Favicon extends WebComponent {
     public Favicon(String id) {
         super(id);
         if(webAppConfigBean!=null) {
-            url = webAppConfigBean.getFaviconUrl();
+            url = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getFaviconUrl());
             contentType = isisConfiguration.getViewer().getWicket().getApplication().getFaviconContentType();
         }
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
index 0c02212..1debc11 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandLogo.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebComponent;
 
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.viewer.wicket.WebAppConfiguration;
 
 /**
@@ -34,7 +35,8 @@ public class BrandLogo extends WebComponent {
 
     private final Placement placement;
 
-    @Inject private WebAppConfiguration webAppConfigBean;
+    @Inject private transient WebAppConfiguration webAppConfigBean;
+    @Inject private transient IsisConfiguration isisConfiguration;
 
     /**
      * Constructor.
@@ -61,7 +63,7 @@ public class BrandLogo extends WebComponent {
     }
 
     private String url() {
-        String logoHeaderUrl = webAppConfigBean.getBrandLogoHeader();
+        String logoHeaderUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader()) .getBrandLogoHeader();
         String logoSigninUrl = webAppConfigBean.getBrandLogoSignin();
 
         return placement.urlFor(logoHeaderUrl, logoSigninUrl);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
index 1e69e77..7b152ef 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/BrandName.java
@@ -54,8 +54,8 @@ public class BrandName extends Label {
         
         if(webAppConfigBean!=null) {
             applicationName = isisConfiguration.getViewer().getWicket().getApplication().getName();
-            logoHeaderUrl = webAppConfigBean.getBrandLogoHeader();
-            logoSigninUrl = webAppConfigBean.getBrandLogoSignin();
+            logoHeaderUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoHeader());
+            logoSigninUrl = webAppConfigBean.contextPathSensitive(isisConfiguration.getViewer().getWicket().getApplication().getBrandLogoSignin());
         }
 
         setDefaultModel(Model.of(applicationName));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index a42901e..65e03c5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -267,11 +267,11 @@ public abstract class PageAbstract extends WebPageBase implements ActionPromptPr
         final JGrowlBehaviour jGrowlBehaviour = new JGrowlBehaviour(getCommonContext());
         jGrowlBehaviour.renderFeedbackMessages(response);
 
-        String applicationCss = getWebAppConfigBean().getApplicationCss();
+        String applicationCss = getIsisConfiguration().getViewer().getWicket().getApplication().getCss();
         if(applicationCss != null) {
             response.render(CssReferenceHeaderItem.forUrl(applicationCss));
         }
-        String applicationJs = getWebAppConfigBean().getApplicationJs();
+        String applicationJs = getIsisConfiguration().getViewer().getWicket().getApplication().getJs();
         if(applicationJs != null) {
             response.render(JavaScriptReferenceHeaderItem.forUrl(applicationJs));
         }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
index e25c5ee..d36d53c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/accmngt/AccountManagementPageAbstract.java
@@ -116,11 +116,11 @@ public class AccountManagementPageAbstract extends WebPageBase {
         response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(
                 BootstrapJavaScriptReference.instance())));
 
-        String applicationCss = getWebAppConfigBean().getApplicationCss();
+        String applicationCss = getIsisConfiguration().getViewer().getWicket().getApplication().getCss();
         if(applicationCss != null) {
             response.render(CssReferenceHeaderItem.forUrl(applicationCss));
         }
-        String applicationJs = getWebAppConfigBean().getApplicationJs();
+        String applicationJs = getIsisConfiguration().getViewer().getWicket().getApplication().getJs();
         if(applicationJs != null) {
             response.render(JavaScriptReferenceHeaderItem.forUrl(applicationJs));
         }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
index 121f5d1..312d000 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
@@ -95,11 +95,11 @@ public class MmvErrorPage extends WebPageBase {
         response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
         response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(BootstrapJavaScriptReference.instance())));
 
-        String applicationCss = getWebAppConfigBean().getApplicationCss();
+        String applicationCss = getIsisConfiguration().getViewer().getWicket().getApplication().getCss();
         if(applicationCss != null) {
             response.render(CssReferenceHeaderItem.forUrl(applicationCss));
         }
-        String applicationJs = getWebAppConfigBean().getApplicationJs();
+        String applicationJs = getIsisConfiguration().getViewer().getWicket().getApplication().getJs();
         if(applicationJs != null) {
             response.render(JavaScriptReferenceHeaderItem.forUrl(applicationJs));
         }


[isis] 09/11: ISIS-2264: updates docs

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f65ea49f6e042b5b2eba11b44e820352c5e470df
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 14:48:08 2020 +0000

    ISIS-2264: updates docs
---
 .../config/examples/generated/isis.extensions.adoc |  22 +++-
 .../config/examples/generated/isis.legacy.adoc     |   6 +-
 .../examples/generated/isis.value-types.adoc       |  71 +++++++-----
 .../examples/generated/isis.viewer.wicket.adoc     | 120 ++++++++++++++-------
 4 files changed, 149 insertions(+), 70 deletions(-)

diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.extensions.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.extensions.adoc
index 5fce987..f987851 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.extensions.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.extensions.adoc
@@ -1,20 +1,34 @@
 | isis.extensions.cors. +
 allowed-headers
 | 
-| 
+| Which HTTP headers are allowed in a CORS request.
+
+For more information, check the usage of the `cors.allowed.headers` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
+
 
 | isis.extensions.cors. +
 allowed-methods
 | 
-| 
+| Which HTTP methods are permitted in a CORS request.
+
+For more information, check the usage of the `cors.allowed.methods` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
+
 
 | isis.extensions.cors. +
 allowed-origins
 |  *
-| 
+| Which origins are allowed to make CORS requests.
+
+The default is the wildcard ("*") but this can be made more restrictive if necessary.
+
+For more information, check the usage of the `cors.allowed.origins` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
+
 
 | isis.extensions.cors. +
 exposed-headers
 |  Authorization
-| 
+| Which HTTP headers are exposed in a CORS request.
+
+For more information, check the usage of the `cors.exposed.headers` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
+
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.legacy.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.legacy.adoc
index b46ab7d..46833d1 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.legacy.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.legacy.adoc
@@ -1,10 +1,12 @@
 | isis.legacy.value-types.money. +
 currency
 | 
-| 
+| Configures the default currency code used by `MoneyValueSemanticsProvider`. @deprecated
+
 
 | isis.legacy.value-types. +
 percentage.format
 | 
-| 
+| Configures the formats understood by `PercentageValueSemanticsProvider`. @deprecated
+
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.value-types.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.value-types.adoc
index 023d082..a658185 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.value-types.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.value-types.adoc
@@ -1,110 +1,131 @@
+| isis.value-types.primitives. +
+integer.format
+| 
+| 
+
 | isis.value-types.java-lang. +
 byte.format
 | 
-| 
+| Configures the number format understood by `ByteValueSemanticsProviderAbstract`. @deprecated
+
 
 | isis.value-types.java-lang. +
 double.format
 | 
-| 
+| Configures the number format understood by `DoubleValueSemanticsProviderAbstract`. @deprecated
+
 
 | isis.value-types.java-lang. +
 float.format
 | 
-| 
+| Configures the number format understood by `FloatValueSemanticsProviderAbstract`. @deprecated
+
 
 | isis.value-types.java-lang. +
 long.format
 | 
-| 
+| Configures the number format understood by `LongValueSemanticsProviderAbstract`. @deprecated
+
 
 | isis.value-types.java-lang. +
 short.format
 | 
-| 
+| Configures the number format understood by `ShortValueSemanticsProviderAbstract`. @deprecated
+
 
 | isis.value-types.java-math. +
 big-decimal.format
 | 
-| 
+| Configures the number format understood by `BigDecimalValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-math. +
 big-integer.format
 | 
-| 
+| Configures the number format understood by `BigIntegerValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-sql. +
 date.format
 |  medium
-| 
+| Configures the formats understood by `JavaSqlDateValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-sql. +
 time.format
 |  short
-| 
+| Configures the formats understood by `JavaSqlTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-sql. +
 timestamp.format
 |  short
-| 
+| Configures the formats understood by `JavaSqlTimeStampValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 local-date-time.format
 |  medium
-| 
+| Configures the formats understood by `LocalDateTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 local-date.format
 |  medium
-| 
+| Configures the formats understood by `LocalDateValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 local-time.format
 |  medium
-| 
+| Configures the formats understood by `LocalTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 offset-date-time.format
 |  medium
-| 
+| Configures the formats understood by `OffsetDateTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 offset-time.format
 |  medium
-| 
+| Configures the formats understood by `OffsetTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-time. +
 zoned-date-time.format
 |  medium
-| 
+| Configures the formats understood by `ZonedDateTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.java-util. +
 date.format
 |  medium
-| 
+| Configures the formats understood by `JavaUtilDateValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.joda. +
 date-time.format
 |  medium
-| 
+| Configures the formats understood by `JodaDateTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.joda. +
 local-date-time.format
 |  medium
-| 
+| Configures the formats understood by `JodaLocalDateTimeValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.joda. +
 local-date.format
 |  medium
-| 
+| Configures the formats understood by `JodaLocalDateValueSemanticsProvider`. @deprecated
+
 
 | isis.value-types.primitives. +
 int.format
 | 
-| 
+| Configures the number format understood by `IntValueSemanticsProviderAbstract`. @deprecated
 
-| isis.value-types.primitives. +
-integer.format
-| 
-| 
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
index 3c7853b..756f59d 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
@@ -36,42 +36,55 @@ application.brand-logo-signin
 | isis.viewer.wicket. +
 application.css
 | 
-| URL of file to read any custom CSS, relative to relative to the class-path resource root.
+| URL of file to read any custom CSS, relative to `static` package on the class path.
+
+A typical value is `css/application.css`. This will result in this file being read from the `static.css` package (because static resources such as CSS are mounted by Spring by default under `static` package).
 
 
 | isis.viewer.wicket. +
 application. +
 favicon-content-type
 | 
-| 
+| Specifies the content type of the favIcon, if any.
+
 
 | isis.viewer.wicket. +
 application.favicon-url
 | 
-| 
+| Specifies the URL to use of the favIcon.
+
+This is expected to be a local resource.
+
 
 | isis.viewer.wicket. +
 application.js
 | 
-| URL of file to read any custom Javascript, relative to the class-path resource root.
+| URL of file to read any custom Javascript, relative to `static` package on the class path.
+
+A typical value is `css/application.js`. This will result in this file being read from the `static.js` package (because static resources such as CSS are mounted by Spring by default under `static` package).
 
 
 | isis.viewer.wicket. +
 application. +
 menubars-layout-xml
 |  menubars.layout.xml
-| 
+| Specifies the file name containing the menubars.
+
+This is expected to be a local resource.
+
 
 | isis.viewer.wicket. +
 application.name
 |  Apache Isis ™
-| Identifies the application on the sign-in page (unless a image is configured) and on top-left in the header (unless a \{@link Application#brandLogoHeader image is configured).
+| Identifies the application on the sign-in page (unless a sign-in image is configured) and on top-left in the header (unless a header image is configured).
 
 
 | isis.viewer.wicket. +
 application.version
 | 
-| The version of the application, eg 1.0, 1.1, etc. If present, then this will be shown in the footer on every page as well as on the about page.
+| The version of the application, eg 1.0, 1.1, etc.
+
+If present, then this will be shown in the footer on every page as well as on the about page.
 
 
 | isis.viewer.wicket.base-path
@@ -82,19 +95,35 @@ application.version
 | isis.viewer.wicket. +
 bookmarked-pages.max-size
 |  15
-| 
+| Specifies the maximum number of bookmarks to show.
+
+These are aged out on an MRU-LRU basis.
+
 
 | isis.viewer.wicket. +
 bookmarked-pages.show-chooser
 |  true
-| Determines whether the bookmarks should be available in the header.
+| Whether the panel providing linsk to previously visited object should be accessible from the top-left of the header.
+
+
+| isis.viewer.wicket. +
+bookmarked-pages. +
+show-drop-down-on-footer
+|  true
+| Whether the drop-down list of previously visited objects should be shown in the footer.
 
 
 | isis.viewer.wicket. +
-breadcrumbs.show-chooser
+breadcrumbs.enabled
 |  true
-| Determines whether the breadcrumbs should be available in the footer.
+| Whether to enable the 'where am i' feature, in other words the breadcrumbs.
+
 
+| isis.viewer.wicket. +
+breadcrumbs. +
+max-parent-chain-length
+|  64
+| 
 
 | isis.viewer.wicket. +
 clear-original-destination
@@ -120,13 +149,17 @@ Each Date scalar panel will use \{#getDatePattern()} or \{@linkplain #getDateTim
 | isis.viewer.wicket. +
 date-picker.max-date
 |  2100-01-01T00:00:00.000Z
-| As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
+| Defines the first date available in the date picker.
+
+As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
 
 
 | isis.viewer.wicket. +
 date-picker.min-date
 |  1900-01-01T00:00:00.000Z
-| As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
+| Defines the first date available in the date picker.
+
+As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
 
 
 | isis.viewer.wicket. +
@@ -226,17 +259,28 @@ This behaviour is disabled by default; the viewer will update the existing page
 | isis.viewer.wicket. +
 remember-me.cookie-key
 |  isisWicketRememberMe
-| 
+| If the "remember me" feature is available, specifies the key to hold the encrypted credentials in the cookie.
+
 
 | isis.viewer.wicket. +
 remember-me.encryption-key
 | 
-| 
+| If the "remember me" feature is available, optionally specifies an encryption key (a complex string acting as salt to the encryption algorithm) for computing the encrypted credentials.
+
+If not set, then (in production mode) the Wicket viewer will compute a random key each time it is started. This will mean that any credentials stored between sessions will become invalid.
+
+Conversely, if set then (in production mode) then the same salt will be used each time the app is started, meaning that cached credentials can continue to be used across restarts.
+
+In prototype mode this setting is effectively ignored, because the same key will always be provided (either as set, or a fixed literal otherwise).
+
 
 | isis.viewer.wicket. +
 remember-me.suppress
 | 
-| 
+| Whether the sign-in page should have a "remember me" link (the default), or if it should be suppressed.
+
+If "remember me" is available and checked, then the viewer will allow users to login based on encrypted credentials stored in a cookie. An encryption key can optionally be specified.
+
 
 | isis.viewer.wicket. +
 replace-disabled-tag-with- +
@@ -266,14 +310,17 @@ By default this is enabled, in other words Wicket tags are stripped. Please be a
 | isis.viewer.wicket. +
 suppress-password-reset
 | 
-| 
+| Whether to suppress the password reset link on the sign-in page.
+
+Although this is disabled by default (in other words the 'reset password' link is not suppressed), note that in addition the application must provide an implementation of the as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService (same conditions as for the \{@link #isSuppressSignUp()` sign-up link).
+
 
 | isis.viewer.wicket. +
 suppress-sign-up
 | 
 | Whether to suppress the sign-up link on the sign-in page.
 
-Although this is disabled by default (in other words the sign-up link is not suppressed), not that in addition the application must provide an implementation of the as well as a configured \{@link org.apache.isis.applib.services.userreg.EmailNotificationService.
+Although this is disabled by default (in other words the sign-up link is not suppressed), note that in addition the application must provide an implementation of the as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService (same conditions as for the \{@link #isSuppressPasswordReset()` password reset link).
 
 
 | isis.viewer.wicket.themes. +
@@ -296,31 +343,30 @@ provider
 wicket.ui.components.widgets. +
 themepicker. +
 IsisWicketThemeSupportDefault
-| 
+| Specifies an implementation of `org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupport`
+
 
 | isis.viewer.wicket.themes. +
 show-chooser
 | 
-| Whether the theme chooser should be available in the footer.
-
-
-| isis.viewer.wicket. +
-timestamp-pattern
-|  yyyy-MM-dd HH:mm:ss.SSS
-| The pattern used for rendering and parsing timestamps.
+| Whether the theme chooser widget should be available in the footer.
 
 
 | isis.viewer.wicket. +
 use-indicator-for-form-submit
 |  true
-| Whether to show an indicator for a form submit button that it has been clicked. This behaviour is enabled by default, but can be disabled using this flag.
+| Whether to show an indicator for a form submit button that it has been clicked.
+
+This behaviour is enabled by default.
 
 
 | isis.viewer.wicket. +
 use-indicator-for-no-arg- +
 action
 |  true
-| Whether to show an indicator for a no-arg action button that it has been clicked. This behaviour is enabled by default, but can be disabled using this flag.
+| Whether to show an indicator for a no-arg action button that it has been clicked.
+
+This behaviour is enabled by default.
 
 
 | isis.viewer.wicket.welcome. +
@@ -329,21 +375,17 @@ text
 | Text to be displayed on the application’s home page, used as a fallback if welcome.file is not specified. If a @HomePage action exists, then that will take precedence.
 
 
-| isis.viewer.wicket.where-am-i. +
-enabled
-|  true
-| 
-
-| isis.viewer.wicket.where-am-i. +
-max-parent-chain-length
-|  64
-| 
-
 | isis.viewer.wicket. +
 wicket-source-plugin
 | 
 | Whether the Wicket source plugin should be enabled; if so, the markup includes links to the Wicket source.
 
-Be aware that this can substantially impact performance.
+This behaviour is disabled by default. Please be aware that enabloing it can substantially impact performance.
+
+
+| isis.viewer.wicket. +
+timestamp-pattern
+|  yyyy-MM-dd HH:mm:ss.SSS
+| @deprecated - seemingly unused
 
 


[isis] 11/11: ISIS-2264: updates docs

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e1088f072c4203cf2158bd2150203fdf4c44693a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 16:08:36 2020 +0000

    ISIS-2264: updates docs
---
 .../applib-ant/examples/annotation/Nature.java     |   6 +-
 .../examples/services/factory/FactoryService.java  |   3 +
 .../config/examples/generated/isis.applib.adoc     | 112 ++++++++++-----------
 .../isis.core.meta-model.introspector.adoc         |   6 +-
 .../generated/isis.core.meta-model.validator.adoc  |  12 +--
 .../generated/isis.core.runtime-services.adoc      |   8 +-
 .../examples/generated/isis.core.runtime.adoc      |   2 +-
 .../isis.persistence.jdo-datanucleus.impl.adoc     |  28 +++---
 .../generated/isis.viewer.restfulobjects.adoc      |   2 +-
 .../examples/generated/isis.viewer.wicket.adoc     |  30 +++---
 .../apache/isis/core/config/IsisConfiguration.java |  23 +++--
 scripts/generateConfigDocs.groovy                  |   6 +-
 12 files changed, 127 insertions(+), 111 deletions(-)

diff --git a/api/applib/src/main/adoc/modules/applib-ant/examples/annotation/Nature.java b/api/applib/src/main/adoc/modules/applib-ant/examples/annotation/Nature.java
index 4ffa704..fcb6fc1 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/examples/annotation/Nature.java
+++ b/api/applib/src/main/adoc/modules/applib-ant/examples/annotation/Nature.java
@@ -70,8 +70,8 @@ public enum Nature {
      * constructed from some sort of internal memory data structure.
      *
      * <p>
-     *     As for a {@link #EXTERNAL_ENTITY}, the identity of a synthetic entity is determined solely by the state of
-     *     object's properties (that have not been set to be ignored using
+     *     As for a {@link #EXTERNAL_ENTITY}, the identity of a synthetic entity is determined solely by the 
+     *     state of object's properties (that have not been set to be ignored using
      *     {@link org.apache.isis.applib.annotation.Property#notPersisted()}).
      * </p>
      *
@@ -82,7 +82,7 @@ public enum Nature {
      */
     INMEMORY_ENTITY,
     /**
-     * An object that is conceptually part of the application layer, and which surfaces behaviour and/or state that
+     * An object that is conceptually part of the application layer, and which surfaces behavior and/or state that
      * is aggregate of one or more domain entity.
      *
      * <p>
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/factory/FactoryService.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/factory/FactoryService.java
index f13919e..a3eaa5e 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/factory/FactoryService.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/factory/FactoryService.java
@@ -53,6 +53,7 @@ public interface FactoryService {
      * @param mixinClass
      * @param mixedIn
      * @return
+     * @apiNote forces the mixinClass to be added to the meta-model if not already
      */
     <T> T mixin(Class<T> mixinClass, Object mixedIn);
 
@@ -60,6 +61,7 @@ public interface FactoryService {
      * Creates a new ViewModel instance, and initializes according to the given {@code mementoStr} 
      * @param viewModelClass
      * @param mementoStr - ignored if {@code null}
+     * @apiNote forces the viewModelClass to be added to the meta-model if not already
      * @since 2.0
      */
     <T> T viewModel(Class<T> viewModelClass, @Nullable String mementoStr);
@@ -67,6 +69,7 @@ public interface FactoryService {
     /**
      * Creates a new ViewModel instance 
      * @param viewModelClass
+     * @apiNote forces the viewModelClass to be added to the meta-model if not already
      * @since 2.0
      */
     default <T> T viewModel(Class<T> viewModelClass) {
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
index 3a010de..a77d788 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.applib.adoc
@@ -6,7 +6,7 @@ patterns
 
 Providing a default set of patterns encourages a common set of verbs to be used.
 
-The font awesome class for individual actions can be overridden using `org.apache.isis.applib.annotation.ActionLayout#cssClassFa()`.
+The font awesome class for individual actions can be overridden using ``org.apache.isis.applib.annotation.ActionLayout#cssClassFa()``.
 
 
 | isis.applib.annotation. +
@@ -17,27 +17,27 @@ patterns
 
 Providing a default set of patterns encourages a common set of verbs to be used.
 
-The CSS class for individual actions can be overridden using `org.apache.isis.applib.annotation.ActionLayout#cssClass()`.
+The CSS class for individual actions can be overridden using ``org.apache.isis.applib.annotation.ActionLayout#cssClass()``.
 
 
 | isis.applib.annotation.action. +
 command
 | 
-| The default for whether action invocations should be reified as a `org.apache.isis.applib.services.command.Command` using the `org.apache.isis.applib.services.command.spi.CommandService`, possibly so that the actual execution of the action can be deferred until later (background execution) or replayed against a copy of the system.
+| The default for whether action invocations should be reified as a ``org.apache.isis.applib.services.command.Command`` using the ``org.apache.isis.applib.services.command.spi.CommandService``, possibly so that the actual execution of the action can be deferred until later (background execution) or replayed against a copy of the system.
 
-In particular, the `org.apache.isis.applib.services.command.CommandWithDto` implementation of `org.apache.isis.applib.services.command.Command` represents the action invocation memento (obtained using `CommandWithDto#asDto()`) as a `org.apache.isis.schema.cmd.v2.CommandDto`.
+In particular, the ``org.apache.isis.applib.services.command.CommandWithDto`` implementation of ``org.apache.isis.applib.services.command.Command`` represents the action invocation memento (obtained using ``CommandWithDto#asDto()``) as a ``org.apache.isis.schema.cmd.v2.CommandDto``.
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#command()`.
+This setting can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.Action#command()``.
 
 
 | isis.applib.annotation.action. +
 domain-event.post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.domain.ActionDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever an action is being interacted with.
+| Influences whether an ``org.apache.isis.applib.events.domain.ActionDomainEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever an action is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Action#domainEvent()` for the action in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the ``org.apache.isis.applib.annotation.Action#domainEvent()`` for the action in question:
 
 * If set to some subtype of ActionDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of ActionDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -47,17 +47,17 @@ The algorithm for determining whether (and what type of) an event is actually se
 | isis.applib.annotation.action. +
 explicit
 | 
-| Whether or not a public method needs to be annotated with @`org.apache.isis.applib.annotation.Action` in order to be picked up as an action in the metamodel.
+| Whether or not a public method needs to be annotated with @``org.apache.isis.applib.annotation.Action`` in order to be picked up as an action in the metamodel.
 
 
 | isis.applib.annotation.action. +
 publishing
 | 
-| The default for whether action invocations should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
+| The default for whether action invocations should be sent through to the ``org.apache.isis.applib.services.publish.PublisherService`` for publishing.
 
-The service's publish method is called only once per transaction, with `org.apache.isis.applib.services.iactn.Interaction.Execution` collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
+The service's publish method is called only once per transaction, with ``org.apache.isis.applib.services.iactn.Interaction.Execution`` collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#publishing()`.
+This setting can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.Action#publishing()``.
 
 
 | isis.applib.annotation. +
@@ -66,7 +66,7 @@ default-view
 | 
 | Defines the initial view to display collections when rendered.
 
-The value of this can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.CollectionLayout#defaultView()`. Note that this default configuration property is an enum and so defines only a fixed number of values, whereas the annotation returns a string; this is to allow for flexibility that individual viewers might support their own additional types. For example, the Wicket viewer supports which can render objects that have a date on top of a calendar view.
+The value of this can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.CollectionLayout#defaultView()``. Note that this default configuration property is an enum and so defines only a fixed number of values, whereas the annotation returns a string; this is to allow for flexibility that individual viewers might support their own additional types. For example, the Wicket viewer supports which can render objects that have a date on top of a calendar view.
 
 
 | isis.applib.annotation. +
@@ -74,18 +74,18 @@ collection-layout.paged
 |  12
 | Defines the default number of objects that are shown in a "parented" collection of a domain object, result of invoking an action.
 
-This can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.CollectionLayout#paged()`.
+This can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.CollectionLayout#paged()``.
 
 
 | isis.applib.annotation. +
 collection.domain-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.domain.CollectionDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a collection is being interacted with.
+| Influences whether an ``org.apache.isis.applib.events.domain.CollectionDomainEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a collection is being interacted with.
 
 Up to two different events can be fired during an interaction, with the event's phase determining which (hide, disable)Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Collection#domainEvent()` for the collection action in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the ``org.apache.isis.applib.annotation.Collection#domainEvent()`` for the collection action in question:
 
 * If set to some subtype of CollectionDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CollectionDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -97,9 +97,9 @@ domain-object-layout. +
 css-class-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.CssClassUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)` change) the CSS classes that are used.
+| Influences whether an ``org.apache.isis.applib.events.ui.CssClassUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)`` change) the CSS classes that are used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#cssClassUiEvent()` @DomainObjectLayout(cssClassEvent=...)} for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.DomainObjectLayout#cssClassUiEvent()`` @DomainObjectLayout(cssClassEvent=...)} for the domain object in question.
 
 * If set to some subtype of CssClassUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CssClassUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -111,9 +111,9 @@ domain-object-layout. +
 icon-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.IconUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)` change) the icon that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.IconUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)`` change) the icon that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#iconUiEvent()` @DomainObjectLayout(iconEvent=...)} for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.DomainObjectLayout#iconUiEvent()`` @DomainObjectLayout(iconEvent=...)} for the domain object in question.
 
 * If set to some subtype of IconUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of IconUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -125,11 +125,11 @@ domain-object-layout. +
 layout-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.LayoutUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)` change) the layout that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.LayoutUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)`` change) the layout that is used.
 
 If a different layout value has been set, then a layout in the form `Xxx.layout-zzz.xml` use used (where `zzz` is the name of the layout).
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#layoutUiEvent()` @DomainObjectLayout(layoutEvent=...)} for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.DomainObjectLayout#layoutUiEvent()`` @DomainObjectLayout(layoutEvent=...)} for the domain object in question.
 
 * If set to some subtype of LayoutUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of LayoutUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -141,7 +141,7 @@ domain-object-layout.paged
 |  25
 | Defines the default number of objects that are shown in a "standalone" collection obtained as the result of invoking an action.
 
-This can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObjectLayout#paged()`.
+This can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.DomainObjectLayout#paged()``.
 
 
 | isis.applib.annotation. +
@@ -149,9 +149,9 @@ domain-object-layout. +
 title-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.TitleUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)` change) the title that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.TitleUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain object is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)`` change) the title that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.DomainObjectLayout#titleUiEvent()` @DomainObjectLayout(titleEvent=...)} for the domain object in question.
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.DomainObjectLayout#titleUiEvent()`` @DomainObjectLayout(titleEvent=...)} for the domain object in question.
 
 * If set to some subtype of TitleUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of TitleUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -161,9 +161,9 @@ The algorithm for determining whether (and what type of) an event is sent depend
 | isis.applib.annotation. +
 domain-object.auditing
 | 
-| The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to the `org.apache.isis.applib.services.audit.AuditerService`.
+| The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to the ``org.apache.isis.applib.services.audit.AuditerService``.
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObject#auditing()` DomainObject#getAuditing()}
+This setting can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.DomainObject#auditing()`` DomainObject#getAuditing()}
 
 Note: this applies only to domain entities, not view models.
 
@@ -173,7 +173,7 @@ domain-object. +
 created-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain object has been created using `org.apache.isis.applib.services.factory.FactoryService`.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain object has been created using ``org.apache.isis.applib.services.factory.FactoryService``.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(createdLifecycleEvent=...) for the domain object in question.
 
@@ -195,7 +195,7 @@ domain-object. +
 loaded-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ has been loaded from the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain _entity_ has been loaded from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(loadedLifecycleEvent=...) for the domain object in question.
 
@@ -211,7 +211,7 @@ domain-object. +
 persisted-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistedLifecycleEvent=...) for the domain object in question.
 
@@ -227,7 +227,7 @@ domain-object. +
 persisting-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistingLifecycleEvent=...) for the domain object in question.
 
@@ -241,11 +241,11 @@ Note: this applies only to domain entities, not to view models.
 | isis.applib.annotation. +
 domain-object.publishing
 | 
-| The default for whether the identities of changed objects should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
+| The default for whether the identities of changed objects should be sent through to the ``org.apache.isis.applib.services.publish.PublisherService`` for publishing.
 
-The service's publish method is called only once per transaction, with `PublishedObjects` collecting details of all changed domain objects.
+The service's publish method is called only once per transaction, with ``PublishedObjects`` collecting details of all changed domain objects.
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.DomainObject#publishing()`.
+This setting can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.DomainObject#publishing()``.
 
 
 | isis.applib.annotation. +
@@ -253,7 +253,7 @@ domain-object. +
 removing-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(removingLifecycleEvent=...) for the domain object in question.
 
@@ -271,7 +271,7 @@ domain-object. +
 updated-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ has been updated in the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a persistent domain _entity_ has been updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatedLifecycleEvent=...) for the domain object in question.
 
@@ -287,7 +287,7 @@ domain-object. +
 updating-lifecycle-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a persistent domain _entity_ is about to be updated in the persistence store.
+| Influences whether an ``org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a persistent domain _entity_ is about to be updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatingLifecycleEvent=...) for the domain object in question.
 
@@ -304,9 +304,9 @@ label-position
 | 
 | Defines the default position for the label for an action parameter.
 
-Can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.ParameterLayout#labelPosition()`.
+Can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.ParameterLayout#labelPosition()``.
 
-If left as `LabelPosition#NOT_SPECIFIED` and not overridden, then the position depends upon the viewer implementation.
+If left as ``LabelPosition#NOT_SPECIFIED`` and not overridden, then the position depends upon the viewer implementation.
 
 
 | isis.applib.annotation. +
@@ -315,30 +315,30 @@ label-position
 | 
 | Defines the default position for the label for a domain object property.
 
-Can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.ParameterLayout#labelPosition()`.
+Can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.ParameterLayout#labelPosition()``.
 
-If left as `LabelPosition#NOT_SPECIFIED` and not overridden, then the position depends upon the viewer implementation.
+If left as ``LabelPosition#NOT_SPECIFIED`` and not overridden, then the position depends upon the viewer implementation.
 
 
 | isis.applib.annotation. +
 property.command
 | 
-| The default for whether property edits should be reified as a `org.apache.isis.applib.services.command.Command` using the `org.apache.isis.applib.services.command.spi.CommandService`, possibly so that the actual execution of the property edit can be deferred until later (background execution) or replayed against a copy of the system.
+| The default for whether property edits should be reified as a ``org.apache.isis.applib.services.command.Command`` using the ``org.apache.isis.applib.services.command.spi.CommandService``, possibly so that the actual execution of the property edit can be deferred until later (background execution) or replayed against a copy of the system.
 
-In particular, the `org.apache.isis.applib.services.command.CommandWithDto` implementation of `org.apache.isis.applib.services.command.Command` represents the action invocation memento (obtained using `CommandWithDto#asDto()`) as a `org.apache.isis.schema.cmd.v2.CommandDto`.
+In particular, the ``org.apache.isis.applib.services.command.CommandWithDto`` implementation of ``org.apache.isis.applib.services.command.Command`` represents the action invocation memento (obtained using ``CommandWithDto#asDto()``) as a ``org.apache.isis.schema.cmd.v2.CommandDto``.
 
-This setting can be overridden on a case-by-case basis using `org.apache.isis.applib.annotation.Action#command()`.
+This setting can be overridden on a case-by-case basis using ``org.apache.isis.applib.annotation.Action#command()``.
 
 
 | isis.applib.annotation. +
 property.domain-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.domain.PropertyDomainEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever an property is being interacted with.
+| Influences whether an ``org.apache.isis.applib.events.domain.PropertyDomainEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever an property is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
 
-The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the `org.apache.isis.applib.annotation.Property#domainEvent()` for the property in question:
+The algorithm for determining whether (and what type of) an event is actually sent depends on the value of the ``org.apache.isis.applib.annotation.Property#domainEvent()`` for the property in question:
 
 * If set to some subtype of propertyDomainEvent.Noop, then _no_ event is sent.
 * If set to some subtype of propertyDomainEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -348,9 +348,9 @@ The algorithm for determining whether (and what type of) an event is actually se
 | isis.applib.annotation. +
 property.publishing
 | 
-| The default for whether property edits should be sent through to the `org.apache.isis.applib.services.publish.PublisherService` for publishing.
+| The default for whether property edits should be sent through to the ``org.apache.isis.applib.services.publish.PublisherService`` for publishing.
 
-The service's publish method is called only once per transaction, with `org.apache.isis.applib.services.iactn.Interaction.Execution` collecting details of the identity of the target object, the property edited, and the new value of the property.
+The service's publish method is called only once per transaction, with ``org.apache.isis.applib.services.iactn.Interaction.Execution`` collecting details of the identity of the target object, the property edited, and the new value of the property.
 
 This setting can be overridden on a case-by-case basis using \{ @link org.apache.isis.applib.annotation.Property#publishing()}.
 
@@ -360,9 +360,9 @@ view-model-layout. +
 css-class-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.CssClassUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)` change) the CSS classes that are used.
+| Influences whether an ``org.apache.isis.applib.events.ui.CssClassUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)`` change) the CSS classes that are used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#cssClassUiEvent()` @ViewModelLayout(cssClassEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.ViewModelLayout#cssClassUiEvent()`` @ViewModelLayout(cssClassEvent=...)} for the domain object in question:
 
 * If set to some subtype of CssClassUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CssClassUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -374,9 +374,9 @@ view-model-layout. +
 icon-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.IconUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)` change) the icon that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.IconUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)`` change) the icon that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#iconUiEvent()` @ViewModelLayout(iconEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.ViewModelLayout#iconUiEvent()`` @ViewModelLayout(iconEvent=...)} for the domain object in question:
 
 * If set to some subtype of IconUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of IconUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -388,11 +388,11 @@ view-model-layout. +
 layout-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.LayoutUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)` change) the layout that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.LayoutUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)`` change) the layout that is used.
 
 If a different layout value has been set, then a layout in the form `Xxx.layout-zzz.xml` use used (where `zzz` is the name of the layout).
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#layoutUiEvent()` @ViewModelLayout(layoutEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.ViewModelLayout#layoutUiEvent()`` @ViewModelLayout(layoutEvent=...)} for the domain object in question:
 
 * If set to some subtype of LayoutUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of LayoutUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -404,9 +404,9 @@ view-model-layout. +
 title-ui-event. +
 post-for-default
 |  true
-| Influences whether an `org.apache.isis.applib.events.ui.TitleUiEvent` should be published (on the internal `org.apache.isis.applib.services.eventbus.EventBusService`) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally `org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)` change) the title that is used.
+| Influences whether an ``org.apache.isis.applib.events.ui.TitleUiEvent`` should be published (on the internal ``org.apache.isis.applib.services.eventbus.EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)`` change) the title that is used.
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the `org.apache.isis.applib.annotation.ViewModelLayout#titleUiEvent()` @ViewModelLayout(titleEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``org.apache.isis.applib.annotation.ViewModelLayout#titleUiEvent()`` @ViewModelLayout(titleEvent=...)} for the domain object in question:
 
 * If set to some subtype of TitleUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of TitleUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -417,6 +417,6 @@ The algorithm for determining whether (and what type of) an event is sent depend
 view-model.validation. +
 semantic-checking.enable
 | 
-| Whether to check for inconsistencies between the usage of `org.apache.isis.applib.annotation.DomainObject`, `org.apache.isis.applib.annotation.ViewModel`, `org.apache.isis.applib.annotation.DomainObjectLayout` and `org.apache.isis.applib.annotation.ViewModelLayout`.
+| Whether to check for inconsistencies between the usage of ``org.apache.isis.applib.annotation.DomainObject``, ``org.apache.isis.applib.annotation.ViewModel``, ``org.apache.isis.applib.annotation.DomainObjectLayout`` and ``org.apache.isis.applib.annotation.ViewModelLayout``.
 
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
index 8773d2e..d63ed7f 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.introspector.adoc
@@ -4,7 +4,7 @@ lock-after-full-introspection
 |  true
 | If true, then no new specifications will be allowed to be loaded once introspection has been complete.
 
-Only applies if the introspector is configured to perform full introspection up-front (either because of `IntrospectionMode#FULL` or `IntrospectionMode#LAZY_UNLESS_PRODUCTION` when in production); otherwise is ignored.
+Only applies if the introspector is configured to perform full introspection up-front (either because of ``IntrospectionMode#FULL`` or ``IntrospectionMode#LAZY_UNLESS_PRODUCTION`` when in production); otherwise is ignored.
 
 
 | isis.core.meta-model. +
@@ -12,7 +12,7 @@ introspector.mode
 | 
 | Whether all known types should be fully introspected as part of the bootstrapping, or should only be partially introspected initially.
 
-Leaving this as lazy means that there's a chance that metamodel validation errors will not be discovered during bootstrap. That said, metamodel validation is still run incrementally for any classes introspected lazily after initial bootstrapping (unless `#isValidateIncrementally()` is disabled.
+Leaving this as lazy means that there's a chance that metamodel validation errors will not be discovered during bootstrap. That said, metamodel validation is still run incrementally for any classes introspected lazily after initial bootstrapping (unless ``#isValidateIncrementally()`` is disabled.
 
 
 | isis.core.meta-model. +
@@ -29,6 +29,6 @@ validate-incrementally
 
 This does _not_ apply if the introspector is configured to perform full introspection up-front AND when the metamodel is locked after initial bootstrapping (because in that case the lock check will simply prevent any new specs from being loaded). But it will apply otherwise.
 
-In particular, this setting _can_ still apply even if the introspection mode is set to full, because that in itself does not preclude some code from attempting to load some previously unknown type. For example, a fixture script could attempt to invoke an action on some new type using the `org.apache.isis.applib.services.wrapper.WrapperFactory` - this will cause introspection of that new type to be performed.
+In particular, this setting _can_ still apply even if the introspection mode is set to full, because that in itself does not preclude some code from attempting to load some previously unknown type. For example, a fixture script could attempt to invoke an action on some new type using the ``org.apache.isis.applib.services.wrapper.WrapperFactory`` - this will cause introspection of that new type to be performed.
 
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
index 8943250..85940d8 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.meta-model.validator.adoc
@@ -25,25 +25,25 @@ validator.check-module-extent
 validator. +
 ensure-unique-object-types
 |  true
-| Whether to ensure that the object type of all objects (which can be set either explicitly using `DomainObject#objectType()` or `DomainService#objectType()`, or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
+| Whether to ensure that the object type of all objects (which can be set either explicitly using ``DomainObject#objectType()`` or ``DomainService#objectType()``, or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
 
-It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see `#isExplicitObjectType()`.
+It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see ``#isExplicitObjectType()``.
 
 
 | isis.core.meta-model. +
 validator. +
 explicit-object-type
 | 
-| Whether to ensure that the object type of all objects must be specified explicitly, using either `DomainObject#objectType()` or `DomainService#objectType()`.
+| Whether to ensure that the object type of all objects must be specified explicitly, using either ``DomainObject#objectType()`` or ``DomainService#objectType()``.
 
-It is _highly advisable_ to leave this set as enabled (the default). These object types should also (of course) be unique - that can be checked by setting the `#isEnsureUniqueObjectTypes()` config property.
+It is _highly advisable_ to leave this set as enabled (the default). These object types should also (of course) be unique - that can be checked by setting the ``#isEnsureUniqueObjectTypes()`` config property.
 
 
 | isis.core.meta-model. +
 validator.jaxb-view-model. +
 date-time-type-adapter
 |  true
-| If set, then ensures that for all properties of JAXB-style view models where the property's type is a date or time, then that property has been correctly annotated with @`javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter` (so that the property's value can be converted into a serializable form).
+| If set, then ensures that for all properties of JAXB-style view models where the property's type is a date or time, then that property has been correctly annotated with @``javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
 | isis.core.meta-model. +
@@ -71,7 +71,7 @@ not-inner-class
 validator.jaxb-view-model. +
 reference-type-adapter
 |  true
-| If set, then ensures that for all properties of JAXB-style view models where the property's type is an entity, then that entity's type has been correctly annotated with @`javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter` (so that the property's value can be converted into a serializable form).
+| If set, then ensures that for all properties of JAXB-style view models where the property's type is an entity, then that entity's type has been correctly annotated with @``javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
 | isis.core.meta-model. +
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
index 88d149b..647226b 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime-services.adoc
@@ -1,7 +1,7 @@
 | isis.core.runtime-services. +
 application-features.init
 | 
-| Whether the `org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository` (or the default implementation of that service, at least) should compute the set of `ApplicationFeature` that describe the metamodel eagerly, or lazily.
+| Whether the ``org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository`` (or the default implementation of that service, at least) should compute the set of `ApplicationFeature` that describe the metamodel eagerly, or lazily.
 
 
 | isis.core.runtime-services. +
@@ -35,7 +35,7 @@ email.sender.address
 
 If the username is not specified, is also used as the username to connect to the SMTP service.
 
-This configuration property is mandatory (for the default implementation of the `org.apache.isis.applib.services.email.EmailService`, at least).
+This configuration property is mandatory (for the default implementation of the ``org.apache.isis.applib.services.email.EmailService``, at least).
 
 
 | isis.core.runtime-services. +
@@ -51,7 +51,7 @@ email.sender.password
 | 
 | Specifies the password (corresponding to the username to connect to the SMTP service.
 
-This configuration property is mandatory (for the default implementation of the `org.apache.isis.applib.services.email.EmailService`, at least).
+This configuration property is mandatory (for the default implementation of the ``org.apache.isis.applib.services.email.EmailService``, at least).
 
 
 | isis.core.runtime-services. +
@@ -91,7 +91,7 @@ email.tls.enabled
 exception-recognizer.jdo. +
 disable
 | 
-| Whether the `org.apache.isis.applib.services.exceprecog.ExceptionRecognizer` implementation for JDO/DataNucleus object store - which attempts to sanitize any exceptions arising from that object store - should be disabled (meaning that exceptions will potentially propagate as more serious to the end user).
+| Whether the ``org.apache.isis.applib.services.exceprecog.ExceptionRecognizer`` implementation for JDO/DataNucleus object store - which attempts to sanitize any exceptions arising from that object store - should be disabled (meaning that exceptions will potentially propagate as more serious to the end user).
 
 
 | isis.core.runtime-services. +
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime.adoc
index 7eaf226..1354dd9 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.core.runtime.adoc
@@ -1,6 +1,6 @@
 | isis.core.runtime.locale
 | 
-| If set, then overrides the application's `Locale#getDefault()`
+| If set, then overrides the application's ``Locale#getDefault()``
 
 
 | isis.core.runtime.timezone
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.persistence.jdo-datanucleus.impl.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.persistence.jdo-datanucleus.impl.adoc
index 2ffc3c0..1cbf264 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.persistence.jdo-datanucleus.impl.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.persistence.jdo-datanucleus.impl.adoc
@@ -43,7 +43,7 @@ Can be used to interface with external caching products. Use "none" to turn off
 
 See also Cache docs for JDO, and for JPA
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -57,7 +57,7 @@ For RBDMS, it must be a JNDI name that points to a javax.sql.DataSource object.
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -71,7 +71,7 @@ For RBDMS, it must be a JNDI name that points to a javax.sql.DataSource object.
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -83,7 +83,7 @@ connection-password-decrypter
 
 See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -122,7 +122,7 @@ Defaults to true, which is the opposite of DataNucleus' own default. (The reason
 
 See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -144,7 +144,7 @@ This should be set to `true` when running against an in-memory database, but set
 
 See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the core framework, but is used by one the flyway extension.
+NOTE: this config property isn't used by the core framework, but is used by one the flyway extension.
 
 
 | isis.persistence. +
@@ -156,7 +156,7 @@ auto-create-database
 
 See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -180,7 +180,7 @@ validate-all
 |  true
 | See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -214,7 +214,7 @@ If running under JavaSE the default is RESOURCE_LOCAL, and if running under Java
 
 See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
+NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
 
 
 | isis.persistence. +
@@ -259,7 +259,7 @@ connection-driver-name
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but provided as a convenience for IDE autocomplete (and is mandatory if using JDO Datanucleus).
+NOTE: this config property isn't used by the framework, but provided as a convenience for IDE autocomplete (and is mandatory if using JDO Datanucleus).
 
 
 | isis.persistence. +
@@ -271,7 +271,7 @@ connection-password
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but provided as a convenience for IDE autocomplete. It is not necessarily mandatory, some databases accept an empty password.
+NOTE: this config property isn't used by the framework, but provided as a convenience for IDE autocomplete. It is not necessarily mandatory, some databases accept an empty password.
 
 
 | isis.persistence. +
@@ -282,7 +282,7 @@ jdo.option.connection-url
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - some extensions (H2Console, MsqlDbManager) peek at this URL to determine if they should be enabled. Note that it is also mandatory if using JDO Datanucleus.
+NOTE: some extensions (H2Console, MsqlDbManager) peek at this URL to determine if they should be enabled. Note that it is also mandatory if using JDO Datanucleus.
 
 
 | isis.persistence. +
@@ -294,7 +294,7 @@ connection-user-name
 
 See also `additional-spring-configuration-metadata.json` (PascalCasing instead of kebab-casing).
 
-@implNote - this config property isn't used by the framework, but provided as a convenience for IDE autocomplete (and is mandatory if using JDO Datanucleus).
+NOTE: this config property isn't used by the framework, but provided as a convenience for IDE autocomplete (and is mandatory if using JDO Datanucleus).
 
 
 | isis.persistence. +
@@ -306,6 +306,6 @@ class
 JDOPersistenceManagerFactory
 | See also `additional-spring-configuration-metadata.json` (camelCasing instead of kebab-casing).
 
-@implNote - changing this property from its default is used to enable the flyway extension (in combination with `Datanucleus.Schema#isAutoCreateAll()`
+NOTE: changing this property from its default is used to enable the flyway extension (in combination with ``Datanucleus.Schema#isAutoCreateAll()``
 
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
index abbc31b..96fc48b 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.restfulobjects.adoc
@@ -1,7 +1,7 @@
 | isis.viewer.restfulobjects. +
 base-uri
 | 
-| If left unset (the default), then the RO viewer will use the `javax.ws.rs.core.UriInfo` injected using @link javax.ws.rs.core.Context}) to figure out the base Uri (used to render `href`s).
+| If left unset (the default), then the RO viewer will use the ``javax.ws.rs.core.UriInfo`` (injected using ``javax.ws.rs.core.Context``) to figure out the base Uri (used to render `href`s).
 
 This will be correct much of the time, but will almost certainly be wrong if there is a reverse proxy.
 
diff --git a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
index d9c0f64..bda2ba7 100644
--- a/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/examples/generated/isis.viewer.wicket.adoc
@@ -8,7 +8,7 @@ ajax-debug-mode
 |  org.apache.isis.viewer. +
 wicket.viewer.wicketapp. +
 IsisWicketApplication
-| Specifies the subclass of < code>org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication that is used to bootstrap Wicket.
+| Specifies the subclass of `org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication` that is used to bootstrap Wicket.
 
 There is usually very little reason to change this from its default.
 
@@ -30,7 +30,9 @@ This is rendered on the header panel. An image with a size of 160x40 works well.
 | isis.viewer.wicket. +
 application.brand-logo-signin
 | 
-| Either the location of the image file (relative to the class-path resource root), or an absolute URL. This is rendered on the sign-in page. An image with a size of 400x40 works well. If not specified, the `Application#name` is used instead.
+| Either the location of the image file (relative to the class-path resource root), or an absolute URL.
+
+This is rendered on the sign-in page. An image with a size of 400x40 works well. If not specified, the application name is used instead.
 
 
 | isis.viewer.wicket. +
@@ -135,7 +137,11 @@ The default behaviour is to honour the original destination requested.
 
 | isis.viewer.wicket.credit
 | 
-| IntelliJ unfortunately does not provide IDE completion for lists of classes; YMMV. For further discussion, see for example this stackoverflow question: https://stackoverflow.com/questions/41417933/spring-configuration-properties-metadata-json-for-nested-list-of-objects and this wiki page: https://github.com/spring-projects/spring-boot/wiki/IDE-binding-features#simple-pojo and
+| List of organisations or individuals to give credit to, shown as links and icons in the footer. A maximum of 3 credits can be specified.
+
+IntelliJ unfortunately does not provide IDE completion for lists of classes; YMMV.
+
+NOTE: For further discussion, see for example https://stackoverflow.com/questions/41417933/spring-configuration-properties-metadata-json-for-nested-list-of-objects[this stackoverflow question] and https://github.com/spring-projects/spring-boot/wiki/IDE-binding-features#simple-pojo[this wiki page].
 
 
 | isis.viewer.wicket. +
@@ -143,7 +149,7 @@ date-pattern
 |  dd-MM-yyyy
 | The pattern used for rendering and parsing dates.
 
-Each Date scalar panel will use \{#getDatePattern()} or \{@linkplain #getDateTimePattern()} depending on its date type. In the case of panels with a date picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
+Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
 
 
 | isis.viewer.wicket. +
@@ -167,13 +173,13 @@ date-time-pattern
 |  dd-MM-yyyy HH:mm
 | The pattern used for rendering and parsing date/times.
 
-Each Date scalar panel will use `Wicket#getDatePattern()` or `Wicket#getDateTimePattern()` depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
+Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
 
 
 | isis.viewer.wicket. +
 development-utilities.enable
 | 
-| Determines whether debug bar and other stuff influenced by `org.apache.wicket.settings.DebugSettings#isDevelopmentUtilitiesEnabled()` is enabled or not.
+| Determines whether debug bar and other stuff influenced by `DebugSettings#isDevelopmentUtilitiesEnabled()` is enabled or not.
 
 By default, depends on the mode (prototyping = enabled, server = disabled). This property acts as an override.
 
@@ -183,7 +189,7 @@ dialog-mode
 | 
 | Whether the dialog mode rendered when invoking actions on domain objects should be to use the sidebar (the default) or to use a modal dialog.
 
-This can be overridden on a case-by-case basis using `ActionLayout#promptStyle()`.
+This can be overridden on a case-by-case basis using ``ActionLayout#promptStyle()``.
 
 
 | isis.viewer.wicket. +
@@ -191,7 +197,7 @@ dialog-mode-for-menu
 | 
 | Whether the dialog mode rendered when invoking actions on domain services (that is, menus) should be to use a modal dialog (the default) or to use the sidebar panel.
 
-This can be overridden on a case-by-case basis using `ActionLayout#promptStyle()`.
+This can be overridden on a case-by-case basis using ``ActionLayout#promptStyle()``.
 
 
 | isis.viewer.wicket. +
@@ -217,7 +223,7 @@ standalone-tables
 | isis.viewer.wicket. +
 max-title-length-in-tables
 |  12
-| The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either `#getMaxTitleLengthInParentedTables()` or `#getMaxTitleLengthInStandaloneTables()`.
+| The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either ``#getMaxTitleLengthInParentedTables()`` or ``#getMaxTitleLengthInStandaloneTables()``.
 
 If truncated, then the remainder of the title will be replaced with ellipses (...).
 
@@ -312,7 +318,7 @@ suppress-password-reset
 | 
 | Whether to suppress the password reset link on the sign-in page.
 
-Although this is disabled by default (in other words the 'reset password' link is not suppressed), note that in addition the application must provide an implementation of the `org.apache.isis.applib.services.userreg.UserRegistrationService` as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService` (same conditions as for the `#isSuppressSignUp()` sign-up link).
+Although this is disabled by default (in other words the 'reset password' link is not suppressed), note that in addition the application must provide an implementation of the ``org.apache.isis.applib.services.userreg.UserRegistrationService`` as well as a configured ``org.apache.isis.applib.services.userreg.EmailNotificationService`` (same conditions as for the ``#isSuppressSignUp()`` sign-up link).
 
 
 | isis.viewer.wicket. +
@@ -320,7 +326,7 @@ suppress-sign-up
 | 
 | Whether to suppress the sign-up link on the sign-in page.
 
-Although this is disabled by default (in other words the sign-up link is not suppressed), note that in addition the application must provide an implementation of the `org.apache.isis.applib.services.userreg.UserRegistrationService` as well as a configured `org.apache.isis.applib.services.userreg.EmailNotificationService` (same conditions as for the `#isSuppressPasswordReset()` password reset link).
+Although this is disabled by default (in other words the sign-up link is not suppressed), note that in addition the application must provide an implementation of the ``org.apache.isis.applib.services.userreg.UserRegistrationService`` as well as a configured ``org.apache.isis.applib.services.userreg.EmailNotificationService`` (same conditions as for the ``#isSuppressPasswordReset()`` password reset link).
 
 
 | isis.viewer.wicket.themes. +
@@ -334,7 +340,7 @@ initial
 |  Flatly
 | The initial theme to use.
 
-Expected to be in the list of `#getEnabled()` themes.
+Expected to be in the list of ``#getEnabled()`` themes.
 
 
 | isis.viewer.wicket.themes. +
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 9ad6b95..fc0cf62 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2043,7 +2043,7 @@ public class IsisConfiguration {
              * The pattern used for rendering and parsing dates.
              *
              * <p>
-             * Each Date scalar panel will use {#getDatePattern()} or {@linkplain #getDateTimePattern()} depending on its
+             * Each Date scalar panel will use {@link #getDatePattern()} or {@link #getDateTimePattern()} depending on its
              * date type.  In the case of panels with a date picker, the pattern will be dynamically adjusted so that it can be
              * used by the <a href="https://github.com/Eonasdan/bootstrap-datetimepicker">Bootstrap Datetime Picker</a>
              * component (which uses <a href="http://momentjs.com/docs/#/parsing/string-format/">Moment.js formats</a>, rather
@@ -2056,7 +2056,7 @@ public class IsisConfiguration {
              * The pattern used for rendering and parsing date/times.
              *
              * <p>
-             * Each Date scalar panel will use {@link Wicket#getDatePattern()} or {@link Wicket#getDateTimePattern()}
+             * Each Date scalar panel will use {@link #getDatePattern()} or {@link #getDateTimePattern()}
              * depending on its date type.  In the case of panels with a date time picker, the pattern will be
              * dynamically adjusted so that it can be
              * used by the <a href="https://github.com/Eonasdan/bootstrap-datetimepicker">Bootstrap Datetime Picker</a>
@@ -2432,20 +2432,25 @@ public class IsisConfiguration {
             }
 
             /**
+             * List of organisations or individuals to give credit to, shown as links and icons in the footer.
+             * A maximum of 3 credits can be specified.
+             *
+             * <p>
              * IntelliJ unfortunately does not provide IDE completion for lists of classes; YMMV.
+             * </p>
              *
-             * For further discussion, see for example this stackoverflow question:
-             * https://stackoverflow.com/questions/41417933/spring-configuration-properties-metadata-json-for-nested-list-of-objects
-             * and this wiki page: https://github.com/spring-projects/spring-boot/wiki/IDE-binding-features#simple-pojo and
-             * 
+             * <p>
+             * @implNote - For further discussion, see for example
+             * <a href="https://stackoverflow.com/questions/41417933/spring-configuration-properties-metadata-json-for-nested-list-of-objects">this stackoverflow question</a>
+             * and <a href="https://github.com/spring-projects/spring-boot/wiki/IDE-binding-features#simple-pojo">this wiki page</a>.
+             * </p>
              */
             private List<Credit> credit = new ArrayList<>();
-            
+
             @Data
             public static class Credit {
                 /**
                  * URL of an organisation or individual to give credit to, appearing as a link in the footer.
-                 * A maximum of 3 credits is supported.
                  *
                  * <p>
                  *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
@@ -2456,7 +2461,6 @@ public class IsisConfiguration {
                 private String url;
                 /**
                  * URL of an organisation or individual to give credit to, appearing as text in the footer.
-                 * A maximum of 3 credits is supported.
                  *
                  * <p>
                  *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
@@ -2466,7 +2470,6 @@ public class IsisConfiguration {
                 private String name;
                 /**
                  * Name of an image resource of an organisation or individual, appearing as an icon in the footer.
-                 * A maximum of 3 credits is supported.
                  *
                  * <p>
                  *     For the credit to appear, the {@link #getUrl() url} must be provided along with either
diff --git a/scripts/generateConfigDocs.groovy b/scripts/generateConfigDocs.groovy
index 843166f..7f80ee2 100644
--- a/scripts/generateConfigDocs.groovy
+++ b/scripts/generateConfigDocs.groovy
@@ -262,7 +262,11 @@ static String toAsciidoc(String str) {
 
     System.out.print(".");
     str = str.replaceAll( /\{@link[ ]+?([^}]+?)[ ]+?([^}]+?)[ ]*?}/, '$2')
-    str = str.replaceAll( /\{@link[ ]+?([^}]+?)[ ]*?}/, '`$1`')
+    str = str.replaceAll( /\{@link[ ]+?([^}]+?)[ ]*?}/, '``$1``')
+    str = str.replaceAll( /@apiNote -/, 'TIP:')
+    str = str.replaceAll( /@apiNote/, 'TIP:')
+    str = str.replaceAll( /@implNote -/, 'NOTE:')
+    str = str.replaceAll( /@implNote/, 'NOTE:')
 
     File tf = File.createTempFile("input",".html")
     tf.write(str)   // write to the file


[isis] 08/11: ISIS-2264: fixes compile issue

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 795b8a9a860563166cab8d3b890a8c613dea8943
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 14:47:26 2020 +0000

    ISIS-2264: fixes compile issue
---
 .../org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
index c488d1a..72d39f8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
@@ -133,7 +133,7 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
 
     private void addBreadcrumbs() {
 
-        boolean showBreadcrumbs = getConfiguration().getViewer().getWicket().getBreadcrumbs().isShowChooser();
+        boolean showBreadcrumbs = getConfiguration().getViewer().getWicket().getBookmarkedPages().isShowDropDownOnFooter();
         final Component breadcrumbPanel =
                 showBreadcrumbs
                 ? new BreadcrumbPanel(ID_BREADCRUMBS)


[isis] 06/11: ISIS-2264: adds some more config docs. Renames some properties.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f4bc54a76bb1a1b6d49d121f1d793cc99acd02d6
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 21 13:34:08 2020 +0000

    ISIS-2264: adds some more config docs.  Renames some properties.
    
    specifically:
    
    * isis.viewer.wicket.breadcrumbs.showChooser -> isis.viewer.wicket.bookmarks.show-drop-down-on-footer
    * isis.viewer.wicket.whereAmI.enabled -> isis.viewer.wicket.breadcrumbs.enabled
    * isis.viewer.wicket.whereAmI.maxParentChainLength -> isis.viewer.wicket.breadcrumbs.max-parent-chain-length
---
 .../modules/mignotes/pages/migrating-to-2.0.0.adoc | 15 ++++++++
 .../apache/isis/core/config/IsisConfiguration.java | 43 +++++++++++++++-------
 .../models/whereami/WhereAmIModelDefault.java      |  4 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |  2 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  2 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |  5 +--
 6 files changed, 51 insertions(+), 20 deletions(-)

diff --git a/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc b/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
index a2fdc1d..ad449c0 100644
--- a/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
+++ b/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
@@ -581,6 +581,21 @@ standalone-collection.bulk-load
 |isis.core.runtime-services. +
 {nbsp}{nbsp}translation.po.mode
 
+|isis.viewer. +
+{nbsp}{nbsp}wicket.breadcrumbs.showChooser
+|isis.viewer. +
+{nbsp}{nbsp}wicket.bookmarks.show-drop-down-on-footer
+
+|isis.viewer. +
+{nbsp}{nbsp}wicket.whereAmI.enabled
+|isis.viewer. +
+{nbsp}{nbsp}wicket.breadcrumbs.enabled
+
+|isis.viewer. +
+{nbsp}{nbsp}wicket.whereAmI.maxParentChainLength
+|isis.viewer. +
+{nbsp}{nbsp}wicket.breadcrumbs.max-parent-chain-length
+
 |isis.viewers. +
 {nbsp}{nbsp}collectionLayout.defaultView
 |isis.applib.annotation. +
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index fac0ca3..c029d13 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -2359,7 +2359,11 @@ public class IsisConfiguration {
                 private String js;
 
                 /**
+                 * Specifies the file name containing the menubars.
                  *
+                 * <p>
+                 *     This is expected to be a local resource.
+                 * </p>
                  */
                 @NotNull @NotEmpty
                 private String menubarsLayoutXml = "menubars.layout.xml";
@@ -2375,8 +2379,11 @@ public class IsisConfiguration {
                 
                 /**
                  * The version of the application, eg 1.0, 1.1, etc.
-                 * If present, then this will be shown in the footer on every page as well as on the 
+                 *
+                 * <p>
+                 * If present, then this will be shown in the footer on every page as well as on the
                  * about page.
+                 * </p>
                  */
                 private String version;
             }
@@ -2384,24 +2391,41 @@ public class IsisConfiguration {
             private final BookmarkedPages bookmarkedPages = new BookmarkedPages();
             @Data
             public static class BookmarkedPages {
+
                 /**
-                 * Determines whether the bookmarks should be available in the header.
+                 * Whether the panel providing linsk to previously visited object should be accessible from the top-left of the header.
                  */
                 private boolean showChooser = true;
 
+                /**
+                 * Specifies the maximum number of bookmarks to show.
+                 *
+                 * <p>
+                 *     These are aged out on an MRU-LRU basis.
+                 * </p>
+                 */
                 private int maxSize = 15;
+
+                /**
+                 * Whether the drop-down list of previously visited objects should be shown in the footer.
+                 */
+                private boolean showDropDownOnFooter = true;
+
             }
 
             private final Breadcrumbs breadcrumbs = new Breadcrumbs();
             @Data
             public static class Breadcrumbs {
                 /**
-                 * Determines whether the breadcrumbs should be available in the footer.
+                 * Whether to enable the 'where am i' feature, in other words the breadcrumbs.
                  */
-                private boolean showChooser = true;
+                private boolean enabled = true;
+                /**
+                 *
+                 */
+                private int maxParentChainLength = 64;
             }
 
-
             /**
              * IntelliJ unfortunately does not provide IDE completion for lists of classes; YMMV.
              *
@@ -2500,14 +2524,7 @@ public class IsisConfiguration {
                  */
                 private String text;
             }
-            
-            
-            private final WhereAmI whereAmI = new WhereAmI();
-            @Data
-            public static class WhereAmI {
-                private boolean enabled = true;
-                private int maxParentChainLength = 64;
-            }
+
         }
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
index d369246..f3f7b3f 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
@@ -42,11 +42,11 @@ class WhereAmIModelDefault implements WhereAmIModel {
     private boolean isWhereAmIEnabled;
     private int maxChainLength;
     
-    public WhereAmIModelDefault(EntityModel startOfChain) {
+    public WhereAmIModelDefault(final EntityModel startOfChain) {
         this.startOfChain = startOfChain;
         this.commonContext = startOfChain.getCommonContext();
 
-        val settings = commonContext.getConfiguration().getViewer().getWicket().getWhereAmI();
+        val settings = commonContext.getConfiguration().getViewer().getWicket().getBreadcrumbs();
         this.isWhereAmIEnabled = settings.isEnabled();
         this.maxChainLength = settings.getMaxParentChainLength();
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 0a5e391..f9c0b3c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -151,7 +151,7 @@ public class BreadcrumbPanel extends PanelAbstract<IModel<Void>> {
     protected void onConfigure() {
         super.onConfigure();
 
-        boolean shouldShow = getConfiguration().getViewer().getWicket().getBreadcrumbs().isShowChooser();
+        boolean shouldShow = getConfiguration().getViewer().getWicket().getBookmarkedPages().isShowDropDownOnFooter();
         setVisible(shouldShow);
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 65e03c5..13ea847 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -408,7 +408,7 @@ public abstract class PageAbstract extends WebPageBase implements ActionPromptPr
     }
 
     protected boolean isShowBreadcrumbs() {
-        return getCommonContext().getConfiguration().getViewer().getWicket().getBreadcrumbs().isShowChooser();
+        return getCommonContext().getConfiguration().getViewer().getWicket().getBookmarkedPages().isShowDropDownOnFooter();
     }
 
     protected void bookmarkPageIfShown(final BookmarkableModel<?> model) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index ab29733..c28e0e8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -67,7 +67,7 @@ public class EntityPage extends PageAbstract {
 
     /**
      * Called reflectively, in support of {@link BookmarkablePageLink} links. 
-     * Specifically handled by {@link org.apache.isis.viewer.wicket.viewer.IsisWicketApplication_newPageFactory}
+     * Specifically handled by <code>IsisWicketApplication#newPageFactory()</code>
      */
     public static EntityPage bookmarked(
             IsisWebAppCommonContext commonContext, 
@@ -100,8 +100,7 @@ public class EntityPage extends PageAbstract {
     }
 
     /**
-     * Ensure that any {@link ConcurrencyException} that might have occurred already
-     * (eg from an action invocation) is show.
+     * Ensures that any exception that might have occurred already (eg from an action invocation) is shown.
      */
     public EntityPage(
             IsisWebAppCommonContext commonContext,