You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/04 18:11:59 UTC

[isis] branch master updated: ISIS-2464: refactor UserService#getUser to return an Optional instead

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 429813e  ISIS-2464: refactor UserService#getUser to return an Optional instead
429813e is described below

commit 429813e66b6287ae74f85af2df2cdb3a411b13ed
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 4 19:11:46 2020 +0100

    ISIS-2464: refactor UserService#getUser to return an Optional instead
---
 .../isis/applib/services/user/UserMemento.java     |  9 +++++
 .../isis/applib/services/user/UserService.java     | 41 ++++++++++++++++++----
 .../events/persistence/TimestampService.java       |  2 +-
 .../command/CommandDtoServiceInternalDefault.java  |  2 +-
 .../ixn/InteractionDtoServiceInternalDefault.java  |  4 +--
 .../publish/EntityChangesPublisherDefault.java     |  2 +-
 .../EntityPropertyChangePublisherDefault.java      |  2 +-
 .../runtimeservices/user/UserServiceDefault.java   | 11 +-----
 .../userprof/UserProfileServiceDefault.java        |  9 ++---
 .../java/demoapp/dom/homepage/DemoHomePage.java    |  2 +-
 .../secman/model/app/user/MeService.java           |  2 +-
 .../facets/TenantedAuthorizationFacetDefault.java  |  4 +--
 .../secman/jdo/dom/user/ApplicationUser.java       |  4 +--
 .../pdfjs/ui/components/PdfJsViewerPanel.java      |  2 +-
 .../isis/legacy/applib/DomainObjectContainer.java  |  2 +-
 .../BulkUpdateManagerForDemoToDoItem.java          |  2 +-
 .../demotodoitem/DemoToDoItemRowHandler.java       |  2 +-
 .../DemoToDoItem_create_usingExcelFixture.java     |  2 +-
 .../DemoToDoItem_recreate_usingExcelFixture.java   |  2 +-
 .../todomodule/dom/ExcelDemoToDoItemMenu.java      |  2 +-
 .../ExcelDemoToDoItem_recreate5_for.java           |  2 +-
 .../ExcelDemoToDoItem_tearDown2.java               |  2 +-
 22 files changed, 68 insertions(+), 44 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index b56999f..69c5161 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -43,6 +43,7 @@ public final class UserMemento implements Serializable {
     
     private static final long serialVersionUID = 7190090455587885367L;
     private static final UserMemento SYSTEM_USER = UserMemento.ofName("__system"); 
+//    private static final UserMemento NO_USER = UserMemento.ofName("__nobody");
     
     // -- FACTORIES
     
@@ -53,6 +54,14 @@ public final class UserMemento implements Serializable {
         return SYSTEM_USER;
     }
     
+//    /**
+//     * The framework's internal user with no privileges at all, returned by the
+//     * {@link UserService} if no user is logged in.
+//     */
+//    public static UserMemento nobody() {
+//        return NO_USER;
+//    }
+    
     /**
      * Creates a new user with the specified name and no roles.
      */
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
index d97da15..826fc7d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
@@ -20,25 +20,52 @@ package org.apache.isis.applib.services.user;
 
 import java.util.Optional;
 
+import org.apache.isis.applib.services.iactn.ExecutionContext;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+
 // tag::refguide[]
 public interface UserService {
 
+    // -- INTERFACE
+    
     // end::refguide[]
     /**
-     * Gets the details about the current user, based on calling thread's {@link AuthenticationSession}.
-     * @throws IllegalStateException if the calling thread has no {@link AuthenticationSession}.
+     * Optionally gets the details about the current user, 
+     * based on whether an {@link ExecutionContext} can be found with the current thread's context.
      */
     // tag::refguide[]
-    @Deprecated // TODO make optional, see getUser2
-    UserMemento getUser();      // <.>
+    Optional<UserMemento> getUser();    // <.>
+
+    // end::refguide[]
     
-    Optional<UserMemento> getUser2();
+    // -- UTILITIES
+    
+    /**
+     * Gets the details about the current user.
+     * @throws IllegalStateException if no {@link ExecutionContext} can be found with the current thread's context.
+     */
+    // tag::refguide[]
+    default UserMemento getUserElseFail() {              // <.>
+        // end::refguide[]
+        return getUser()
+                .orElseThrow(()->_Exceptions.illegalState("Current thread has no ExecutionContext."));
+    }
     
-    default Optional<String> getUserName() {
-        return getUser2()
+    // end::refguide[]
+    /**
+     * Optionally gets the the current user's name, 
+     * based on whether an {@link ExecutionContext} can be found with the current thread's context.
+     */
+    // tag::refguide[]
+    default Optional<String> getUserName() {    // <.>
+        return getUser()
                 .map(UserMemento::getName);
     }
     
+    default String getUserNameElseNobody() {    // <.>
+        return getUserName()
+                .orElse("Nobody");
+    }
 
 }
 // end::refguide[]
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/persistence/TimestampService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/persistence/TimestampService.java
index 3417a46..747532b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/persistence/TimestampService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/persistence/TimestampService.java
@@ -51,7 +51,7 @@ public class TimestampService {
         val persistableObject = event.getPersistableObject();
 
         if(persistableObject instanceof HoldsUpdatedBy) {
-            ((HoldsUpdatedBy)persistableObject).setUpdatedBy(userService.getUser().getName());
+            ((HoldsUpdatedBy)persistableObject).setUpdatedBy(userService.getUserNameElseNobody());
         }
         
         if(persistableObject instanceof HoldsUpdatedAt) {
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandDtoServiceInternalDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandDtoServiceInternalDefault.java
index eb8ea1d..89b58d5 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandDtoServiceInternalDefault.java
@@ -153,7 +153,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoFactory {
         dto.setMinorVersion("0");
 
         dto.setTransactionId(uniqueId.toString());
-        dto.setUser(userService.getUser().getName());
+        dto.setUser(userService.getUserNameElseNobody());
         dto.setTimestamp(clockService.getClock().xmlGregorianCalendar());
 
         for (val targetAdapter : targetAdapters) {
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/ixn/InteractionDtoServiceInternalDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/ixn/InteractionDtoServiceInternalDefault.java
index 216cae5..8d50941 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/ixn/InteractionDtoServiceInternalDefault.java
@@ -86,7 +86,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         final String actionId = actionIdentifier.substring(actionIdentifier.indexOf('#')+1);
         final String targetTitle = targetBookmark.toString() + ": " + actionId;
 
-        final String currentUser = userService.getUser().getName();
+        final String currentUser = userService.getUserNameElseNobody();
 
         final ActionDto actionDto = new ActionDto();
         commandDtoServiceInternal.addActionArgs(objectAction, actionDto, argumentAdapters);
@@ -132,7 +132,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         final String propertyId = propertyIdentifier.substring(propertyIdentifier.indexOf('#')+1);
         final String targetTitle = targetBookmark.toString() + ": " + propertyId;
 
-        final String currentUser = userService.getUser().getName();
+        final String currentUser = userService.getUserNameElseNobody();
 
         final PropertyDto propertyDto = new PropertyDto();
         commandDtoServiceInternal.addPropertyValue(property, propertyDto, newValueAdapterIfAny);
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
index 95cce9b..4a155d5 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
@@ -69,7 +69,7 @@ public class EntityChangesPublisherDefault implements EntityChangesPublisher {
         }
         
         val currentTime = clockService.getClock().javaSqlTimestamp();
-        val currentUser = userService.getUser().getName();
+        val currentUser = userService.getUserNameElseNobody();
         
         val entityChanges = hasEnlistedEntityChanges.getEntityChanges(currentTime, currentUser);
         
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
index 4eb4e77..7dc21e8 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
@@ -73,7 +73,7 @@ public class EntityPropertyChangePublisherDefault implements EntityPropertyChang
         }
         
         val currentTime = clockService.getClock().javaSqlTimestamp();
-        val currentUser = userService.getUser().getName();
+        val currentUser = userService.getUserNameElseNobody();
         val currentTransactionId = transactionService.currentTransactionId();
         
         hasEnlistedEntityPropertyChanges.streamPropertyChanges(
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/user/UserServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/user/UserServiceDefault.java
index fa79311..6f2188d 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/user/UserServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/user/UserServiceDefault.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.iactn.ExecutionContext;
 import org.apache.isis.applib.services.user.UserMemento;
 import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.runtime.iactn.InteractionTracker;
 
 @Service
@@ -45,18 +44,10 @@ public class UserServiceDefault implements UserService {
     @Inject private InteractionTracker isisInteractionTracker;
     
     @Override
-    public UserMemento getUser() {
-        return isisInteractionTracker.currentExecutionContext()
-                .map(ExecutionContext::getUser)
-                .orElseThrow(()->_Exceptions.illegalState("Current thread has not AuthenticationSession."));
-    }
-    
-    @Override
-    public Optional<UserMemento> getUser2() {
+    public Optional<UserMemento> getUser() {
         return isisInteractionTracker.currentExecutionContext()
                 .map(ExecutionContext::getUser);
     }
-
     
 
 }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/userprof/UserProfileServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/userprof/UserProfileServiceDefault.java
index 9bad64e..a6364a2 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/userprof/UserProfileServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/userprof/UserProfileServiceDefault.java
@@ -27,9 +27,8 @@ import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.services.userprof.UserProfileService;
-import org.apache.isis.core.security.authentication.AuthenticationSession;
-import org.apache.isis.core.security.authentication.AuthenticationContext;
 
 @Service
 @Named("isisRuntimeServices.UserProfileServiceDefault")
@@ -38,13 +37,11 @@ import org.apache.isis.core.security.authentication.AuthenticationContext;
 @Qualifier("Default")
 public class UserProfileServiceDefault implements UserProfileService {
 
-    @Inject private AuthenticationContext authenticationSessionTracker;
+    @Inject private UserService userService;
     
     @Override
     public String userProfileName() {
-        return authenticationSessionTracker.currentAuthenticationSession()
-                .map(AuthenticationSession::getUserName)
-                .orElse(null);
+        return userService.getUserName().orElse(null);
     }
 
     
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
index 4503bf9..b445219 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
@@ -39,7 +39,7 @@ public class DemoHomePage
         implements HasAsciiDocDescription {                     // <.>
 
     public String title() {                                     // <.>
-        return "Hello, " + userService.getUser().getName();
+        return "Hello, " + userService.getUserNameElseNobody();
     }
 
     public AsciiDoc getWelcome() {                              // <.>
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
index 836a973..17b0cf7 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
@@ -79,7 +79,7 @@ public class MeService {
     }
 
     protected ApplicationUser doMe() {
-        final String myName = userService.getUser().getName();
+        final String myName = userService.getUserNameElseNobody();
         return applicationUserRepository.findOrCreateUserByUsername(myName);
     }
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/facets/TenantedAuthorizationFacetDefault.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/facets/TenantedAuthorizationFacetDefault.java
index f1a2a26..22a4e51 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/facets/TenantedAuthorizationFacetDefault.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/facets/TenantedAuthorizationFacetDefault.java
@@ -66,7 +66,7 @@ public class TenantedAuthorizationFacetDefault extends FacetAbstract implements
         }
 
         final Object domainObject = ic.getTarget().getPojo();
-        final String userName = userService.getUser().getName();
+        final String userName = userService.getUserNameElseNobody();
 
         final ApplicationUser applicationUser = findApplicationUser(userName);
         if (applicationUser == null) {
@@ -91,7 +91,7 @@ public class TenantedAuthorizationFacetDefault extends FacetAbstract implements
         }
 
         final Object domainObject = ic.getTarget().getPojo();
-        final String userName = userService.getUser().getName();
+        final String userName = userService.getUserNameElseNobody();
 
         final ApplicationUser applicationUser = findApplicationUser(userName);
         if (applicationUser == null) {
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
index bb929a0..d157eae 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
@@ -406,11 +406,11 @@ org.apache.isis.extensions.secman.api.user.ApplicationUser {
 
     // -- helpers
     boolean isForSelf() {
-        final String currentUserName = userService.getUser().getName();
+        final String currentUserName = userService.getUserElseFail().getName();
         return Objects.equals(getUsername(), currentUserName);
     }
     boolean isRunAsAdministrator() {
-        final UserMemento currentUser = userService.getUser();
+        final UserMemento currentUser = userService.getUserElseFail();
         final List<RoleMemento> roles = currentUser.getRoles();
 
         val adminRoleSuffix = ":" + configBean.getAdminRoleName();
diff --git a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
index b5edb51..850b306 100644
--- a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
+++ b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
@@ -196,7 +196,7 @@ class PdfJsViewerPanel extends ScalarPanelAbstractLegacy<ScalarPropertyModel> im
     }
 
     private PdfJsViewerAdvisor.InstanceKey toInstanceKey(UserService userService) {
-        String userName = userService.getUser().getName();
+        String userName = userService.getUserNameElseNobody();
 
         val model = getModel();
         val propertyId = model.getIdentifier();
diff --git a/legacy/extensions/core/applib/src/main/java/org/apache/isis/legacy/applib/DomainObjectContainer.java b/legacy/extensions/core/applib/src/main/java/org/apache/isis/legacy/applib/DomainObjectContainer.java
index 26ac01f..862b289b 100644
--- a/legacy/extensions/core/applib/src/main/java/org/apache/isis/legacy/applib/DomainObjectContainer.java
+++ b/legacy/extensions/core/applib/src/main/java/org/apache/isis/legacy/applib/DomainObjectContainer.java
@@ -465,7 +465,7 @@ public class DomainObjectContainer {
     @Deprecated
     @Programmatic
     public UserMemento getUser() {
-    	return userService.getUser();
+    	return userService.getUser().orElse(null);
     }
 
     /**
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateManagerForDemoToDoItem.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateManagerForDemoToDoItem.java
index 932e6c2..499a1ef 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateManagerForDemoToDoItem.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateManagerForDemoToDoItem.java
@@ -145,7 +145,7 @@ public class BulkUpdateManagerForDemoToDoItem {
     }
 
     private String currentUserName() {
-        return userService.getUser().getName();
+        return userService.getUserNameElseNobody();
     }
 
     @Collection
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturehandlers/demotodoitem/DemoToDoItemRowHandler.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturehandlers/demotodoitem/DemoToDoItemRowHandler.java
index 06b62c1..51d0e08 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturehandlers/demotodoitem/DemoToDoItemRowHandler.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturehandlers/demotodoitem/DemoToDoItemRowHandler.java
@@ -74,7 +74,7 @@ public class DemoToDoItemRowHandler implements ExcelFixtureRowHandler {
 
         final LocalDate dueBy = daysFromToday(daysFromToday);
         final String user = executionContext.getParameter("user");
-        final String username = user != null && user.length() > 0 ? user : userService.getUser().getName();
+        final String username = user != null && user.length() > 0 ? user : userService.getUserNameElseNobody();
         ExcelDemoToDoItem toDoItem = toDoItemRepository.findToDoItemsByDescription(description);
         if(toDoItem != null) {
             toDoItem.setCategory(category);
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_create_usingExcelFixture.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_create_usingExcelFixture.java
index 2794480..bd81cce 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_create_usingExcelFixture.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_create_usingExcelFixture.java
@@ -53,7 +53,7 @@ public class DemoToDoItem_create_usingExcelFixture extends FixtureScript {
     @Override
     public void execute(ExecutionContext executionContext) {
 
-        final String ownedBy = this.user != null ? this.user : userService.getUser().getName();
+        final String ownedBy = this.user != null ? this.user : userService.getUserNameElseNobody();
 
         installFor(ownedBy, executionContext);
 
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_recreate_usingExcelFixture.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_recreate_usingExcelFixture.java
index 098bebf..649c3f2 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_recreate_usingExcelFixture.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoToDoItem_recreate_usingExcelFixture.java
@@ -41,7 +41,7 @@ public class DemoToDoItem_recreate_usingExcelFixture extends FixtureScript {
     @Override
     public void execute(ExecutionContext executionContext) {
 
-        final String ownedBy = this.user != null ? this.user : userService.getUser().getName();
+        final String ownedBy = this.user != null ? this.user : userService.getUserNameElseNobody();
 
         executionContext.executeChild(this, new ExcelDemoToDoItem_tearDown2(ownedBy));
         executionContext.executeChild(this, new DemoToDoItem_create_usingExcelFixture(ownedBy));
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
index d5c2c2d..e45a1e8 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
@@ -205,7 +205,7 @@ public class ExcelDemoToDoItemMenu {
     }
     
     private String currentUserName() {
-        return userService.getUser().getName();
+        return userService.getUserNameElseNobody();
     }
     
     private LocalDate currentDate() {
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_recreate5_for.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_recreate5_for.java
index a137ad8..4041459 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_recreate5_for.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_recreate5_for.java
@@ -47,7 +47,7 @@ public class ExcelDemoToDoItem_recreate5_for extends FixtureScript {
     @Override
     protected void execute(ExecutionContext executionContext) {
 
-        final String ownedBy = this.user != null? this.user : userService.getUser().getName();
+        final String ownedBy = this.user != null? this.user : userService.getUserNameElseNobody();
 
         executionContext.executeChild(this, new ExcelDemoToDoItem_tearDown2(ownedBy));
 
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown2.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown2.java
index 7aa07c3..7a395ac 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown2.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown2.java
@@ -38,7 +38,7 @@ public class ExcelDemoToDoItem_tearDown2 extends FixtureScript {
     @Override
     public void execute(ExecutionContext executionContext) {
 
-        final String ownedBy = this.user != null ? this.user : userService.getUser().getName();
+        final String ownedBy = this.user != null ? this.user : userService.getUserNameElseNobody();
 
         isisJdoSupport.executeUpdate(String.format(
                 "delete "