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 2021/05/13 22:30:10 UTC

[isis] branch ISIS-2619 updated (3ece158 -> b63ac5c)

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

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


    from 3ece158  ISIS-2619: fixes compile issue
     add f9a1b26  ISIS-2666: make the ImpersonatedUserHolder... a request scoped component
     add a4143cb  Merge pull request #526 from apache/ISIS-2619
     add 44d2379  ISIS-2619: minor: fixes post merge build issue with incubating reg. test
     add bc6f69f  ISIS-2297: batch process java sources:
     add 5c6314c  ISIS-2619: restore jdo file, strip it down and add notes
     add 836f649  ISIS-2445: revert prev. commit
     add 731b923  ISIS-2674: move interfaces into 'isis.*' namespace
     add 2cb13df  ISIS-2674: include abstract methods when assembling the MM
     new b7db022  ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)
     new fcdf8b2  ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)
     new b63ac5c  ISIS-2619: adds additional roles for isis core and extension

The 3 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:
 .../org/apache/isis/applib/IsisModuleApplib.java   |   4 +
 .../isis/applib/domain/DomainObjectList.java       |  16 +-
 .../services/confview/ConfigurationMenu.java       |   6 +-
 .../services/confview/ConfigurationProperty.java   |   5 +-
 .../services/confview/ConfigurationViewmodel.java  |  15 +-
 .../applib/services/layout/LayoutServiceMenu.java  |   8 +-
 .../services/metamodel/MetaModelServiceMenu.java   |   6 +-
 .../isis/applib/services/user/ImpersonateMenu.java |   7 +-
 .../isis/applib/services/user/RoleMemento.java     |   4 +-
 .../isis/applib/services/user/UserMemento.java     |   4 +-
 .../apache/isis/commons/binding/Observable.java    |   6 +-
 .../org/apache/isis/commons/collections/Can.java   | 181 +++++++++--------
 .../apache/isis/commons/collections/CanVector.java |  22 +-
 .../apache/isis/commons/collections/Can_Empty.java |  58 +++---
 .../isis/commons/collections/Can_Multiple.java     |  62 +++---
 .../isis/commons/collections/Can_Singleton.java    |  66 +++---
 .../isis/commons/collections/Cardinality.java      |   4 +-
 .../isis/commons/collections/ImmutableEnumSet.java |  22 +-
 .../isis/commons/concurrent/AwaitableLatch.java    |   2 +-
 .../org/apache/isis/commons/functional/Result.java |  68 +++----
 .../isis/commons/functional/ThrowingRunnable.java  |  12 +-
 .../commons/handler/ChainOfResponsibility.java     |  24 +--
 .../apache/isis/commons/having/HasEnabling.java    |   2 +-
 .../commons/having/HasTypeSpecificAttributes.java  |   2 +-
 .../apache/isis/commons/internal/_Constants.java   |  10 +-
 .../isis/commons/internal/assertions/_Assert.java  |  24 +--
 .../isis/commons/internal/base/_Blackhole.java     |   2 +-
 .../apache/isis/commons/internal/base/_Bytes.java  |  14 +-
 .../apache/isis/commons/internal/base/_Casts.java  |  20 +-
 .../apache/isis/commons/internal/base/_Either.java |  24 +--
 .../apache/isis/commons/internal/base/_Files.java  |  46 ++---
 .../apache/isis/commons/internal/base/_Lazy.java   |  24 +--
 .../isis/commons/internal/base/_Lazy_Simple.java   |   4 +-
 .../commons/internal/base/_Lazy_ThreadSafe.java    |  10 +-
 .../internal/base/_Lazy_ThreadSafeAndWeak.java     |   8 +-
 .../isis/commons/internal/base/_NullSafe.java      |  64 +++---
 .../isis/commons/internal/base/_Objects.java       |  38 ++--
 .../isis/commons/internal/base/_Oneshot.java       |   6 +-
 .../isis/commons/internal/base/_Reduction.java     |   2 +-
 .../apache/isis/commons/internal/base/_Refs.java   | 136 ++++++-------
 .../isis/commons/internal/base/_Strings.java       | 112 +++++-----
 .../commons/internal/base/_Strings_FastSplit.java  |   4 +-
 .../internal/base/_Strings_HtmlEscaper.java        |   2 +-
 .../internal/base/_Strings_KeyValuePair.java       |   6 +-
 .../internal/base/_Strings_SplitIterator.java      |   4 +-
 .../apache/isis/commons/internal/base/_Text.java   | 160 +++++++--------
 .../apache/isis/commons/internal/base/_Timing.java |  14 +-
 .../apache/isis/commons/internal/base/_Tuples.java |  22 +-
 .../apache/isis/commons/internal/base/_With.java   |  10 +-
 .../binding/InternalBidirectionalBinding.java      |  18 +-
 .../commons/internal/binding/InternalUtil.java     |  34 ++--
 .../internal/binding/_BindableAbstract.java        |  16 +-
 .../isis/commons/internal/binding/_Bindables.java  |   8 +-
 .../commons/internal/binding/_Observables.java     |  14 +-
 .../commons/internal/codec/_DocumentFactories.java |  20 +-
 .../commons/internal/codec/_UrlDecoderUtil.java    |   2 +-
 .../isis/commons/internal/collections/_Arrays.java | 128 ++++++------
 .../commons/internal/collections/_Collections.java |  32 +--
 .../isis/commons/internal/collections/_Inbox.java  |   8 +-
 .../isis/commons/internal/collections/_Lists.java  |  14 +-
 .../isis/commons/internal/collections/_Maps.java   | 118 +++++------
 .../commons/internal/collections/_Multimaps.java   |  58 +++---
 .../isis/commons/internal/collections/_Sets.java   |  70 +++----
 .../commons/internal/collections/_Streams.java     |  16 +-
 .../collections/snapshot/_VersionedList.java       |  28 +--
 .../compare/_Comparators_SequenceCompare.java      |   4 +-
 .../internal/concurrent/_ConcurrentContext.java    |  10 +-
 .../internal/concurrent/_ConcurrentTask.java       |  70 +++----
 .../internal/concurrent/_ConcurrentTaskList.java   |  76 +++----
 .../commons/internal/concurrent/_ThreadSleep.java  |   8 +-
 .../isis/commons/internal/context/_Context.java    |  10 +-
 .../internal/context/_Context_ThreadLocal.java     |  16 +-
 .../isis/commons/internal/context/_Plugin.java     |   8 +-
 .../apache/isis/commons/internal/debug/_Probe.java |  24 +--
 .../commons/internal/debug/xray/XrayDataModel.java |  60 +++---
 .../commons/internal/debug/xray/XrayModel.java     |  30 +--
 .../internal/debug/xray/XrayModelSimple.java       |   6 +-
 .../isis/commons/internal/debug/xray/XrayUi.java   |  83 ++++----
 .../commons/internal/debug/xray/_SwingUtil.java    |   6 +-
 .../debug/xray/sequence/SequenceDiagram.java       | 132 ++++++------
 .../internal/debug/xray/sequence/_Graphics.java    |  44 ++--
 .../commons/internal/exceptions/_Exceptions.java   |  56 ++---
 .../commons/internal/functions/_Functions.java     |   4 +-
 .../commons/internal/functions/_Predicates.java    |   4 +-
 .../apache/isis/commons/internal/graph/_Graph.java |   6 +-
 .../apache/isis/commons/internal/hash/_Hashes.java |  16 +-
 .../isis/commons/internal/image/_Images.java       |  56 ++---
 .../isis/commons/internal/ioc/_IocContainer.java   |  14 +-
 .../commons/internal/ioc/_IocContainer_Spring.java |  22 +-
 .../commons/internal/ioc/_ManagedBeanAdapter.java  |   2 +-
 .../internal/ioc/_ManagedBeanAdapter_Spring.java   |   2 +-
 .../isis/commons/internal/primitives/_Ints.java    | 102 +++++-----
 .../isis/commons/internal/primitives/_Longs.java   |  46 ++---
 .../commons/internal/reflection/_Annotations.java  |  70 +++----
 .../reflection/_Annotations_AttributeMethods.java  |   4 +-
 .../reflection/_Annotations_SyntCache.java         |  18 +-
 ...nthesizedMergedAnnotationInvocationHandler.java |  24 +--
 .../commons/internal/reflection/_MethodCache.java  |  32 +--
 .../isis/commons/internal/reflection/_Reflect.java |  80 ++++----
 .../isis/commons/internal/resources/_Json.java     |  40 ++--
 .../commons/internal/resources/_Resources.java     |  26 +--
 .../isis/commons/internal/resources/_Xml.java      |  52 ++---
 .../isis/commons/internal/resources/_Yaml.java     |  24 +--
 .../internal/testing/_SerializationTester.java     |   2 +-
 .../isis/commons/resource/ResourceCoordinates.java |  48 ++---
 .../services/ClassLoadingStrategyAdvisor.java      |   8 +-
 .../apache/isis/core/config/IsisConfiguration.java |   4 +-
 .../IsisBeanFactoryPostProcessorForSpring.java     |  60 +++---
 .../isis/core/config/beans/IsisBeanMetaData.java   |   2 +-
 .../core/config/beans/IsisBeanTypeClassifier.java  |  32 +--
 .../config/beans/IsisBeanTypeClassifierImpl.java   |  54 ++---
 .../core/config/beans/IsisBeanTypeRegistry.java    |   8 +-
 .../config/beans/IsisBeanTypeRegistryDefault.java  |  34 ++--
 .../config/beans/IsisComponentScanInterceptor.java |  22 +-
 .../beans/IsisComponentScanInterceptorImpl.java    |  36 ++--
 .../core/config/beans/ScannedTypeMetaData.java     |  26 +--
 .../isis/core/config/beans/aoppatch/AopPatch.java  |  36 ++--
 .../aoppatch/TransactionInterceptorFactory.java    |   2 +-
 .../core/config/environment/DeploymentType.java    |   2 +-
 .../config/environment/IsisLocaleInitializer.java  |   4 +-
 .../metamodel/facets/PublishingPolicies.java       |  22 +-
 .../metamodel/specloader/IntrospectionMode.java    |   4 +-
 .../isis/core/config/presets/IsisPresets.java      |  24 +--
 .../config/viewer/wicket/WebAppContextPath.java    |  22 +-
 ...teractionAwareTransactionalBoundaryHandler.java |  44 ++--
 .../interaction/integration/IsisRequestCycle.java  |   2 +-
 .../core/interaction/scope/InteractionScope.java   |  24 +--
 .../interaction/scope/InteractionScopeAware.java   |  16 +-
 .../scope/InteractionScopeLifecycleHandler.java    |   2 +-
 .../interaction/session/InteractionTracker.java    |  20 +-
 .../core/interaction/session/IsisInteraction.java  |  12 +-
 .../jmocking/JUnitRuleMockery2.java                |  12 +-
 .../internaltestsupport/jmocking/MyMockomatic.java |   2 +-
 .../jmocking/PostponedAction.java                  |   8 +-
 .../_testing/FactoryService_forTesting.java        |   4 +-
 .../_testing/MetaModelContext_forTesting.java      |  76 +++----
 .../_testing/MethodRemoverForTesting.java          |   9 +-
 .../_testing/ServiceInjector_forTesting.java       |   2 +-
 .../_testing/ServiceRegistry_forTesting.java       |   8 +-
 .../_testing/_InjectorMethodEvaluator.java         |   2 +-
 .../metamodel/_testing/_ServiceInjectorLegacy.java |  36 ++--
 .../metamodel/commons/CanonicalParameterUtil.java  |  28 +--
 .../core/metamodel/commons/ClassExtensions.java    |   4 +-
 .../isis/core/metamodel/commons/ClassUtil.java     |   4 +-
 .../core/metamodel/commons/MethodExtensions.java   |   2 +-
 .../isis/core/metamodel/commons/MethodUtil.java    |  52 ++---
 .../isis/core/metamodel/commons/Wormhole.java      |   2 +-
 .../core/metamodel/consent/InteractionAdvisor.java |   2 +-
 .../apache/isis/core/metamodel/consent/Veto.java   |   2 +-
 .../metamodel/context/HasMetaModelContext.java     |  24 +--
 .../core/metamodel/context/MetaModelContext.java   |  34 ++--
 .../metamodel/context/MetaModelContextAware.java   |   2 +-
 .../context/MetaModelContext_usingIoc.java         |  68 +++----
 .../core/metamodel/context/MetaModelContexts.java  |   2 +-
 .../isis/core/metamodel/events/MetamodelEvent.java |   6 +-
 .../metamodel/execution/InteractionInternal.java   |  18 +-
 .../apache/isis/core/metamodel/facetapi/Facet.java |  10 +-
 .../core/metamodel/facetapi/FacetAbstract.java     |  34 ++--
 .../isis/core/metamodel/facetapi/FacetHolder.java  |  20 +-
 .../core/metamodel/facetapi/FacetHolderImpl.java   |  32 +--
 .../isis/core/metamodel/facetapi/FeatureType.java  |   8 +-
 .../core/metamodel/facetapi/HasFacetHolder.java    |  14 +-
 .../core/metamodel/facetapi/MetaModelRefiner.java  |   4 +-
 .../core/metamodel/facetapi/MethodRemover.java     |  20 +-
 .../isis/core/metamodel/facets/ActionSupport.java  |  55 ++---
 .../isis/core/metamodel/facets/Annotations.java    |  44 ++--
 .../isis/core/metamodel/facets/FacetFactory.java   |  12 +-
 .../metamodel/facets/FacetFactoryAbstract.java     |  12 +-
 .../isis/core/metamodel/facets/FacetedMethod.java  |  16 +-
 .../metamodel/facets/FacetedMethodParameter.java   |  10 +-
 .../core/metamodel/facets/ParameterSupport.java    |  91 +++++----
 ...ropertyOrCollectionIdentifyingFacetFactory.java |   4 +-
 ...rCollectionIdentifyingFacetFactoryAbstract.java |   4 +-
 .../core/metamodel/facets/TypedHolderDefault.java  |   2 +-
 .../facets/actcoll/typeof/TypeOfFacet.java         |  28 +--
 ...nChoicesForCollectionParameterFacetFactory.java |  30 +--
 .../actions/action/ActionOverloadingValidator.java |  24 +--
 .../explicit/ActionExplicitFacetAbstract.java      |   2 +-
 .../hidden/HiddenFacetForActionAnnotation.java     |   2 +-
 .../action/invocation/ActionDomainEventFacet.java  |   2 +-
 .../invocation/ActionDomainEventFacetAbstract.java |  12 +-
 .../action/invocation/ActionInvocationFacet.java   |   2 +-
 ...onInvocationFacetForDomainEventFromDefault.java |   2 +-
 .../actions/contributing/ContributingFacet.java    |  18 +-
 .../contributing/ContributingFacetAbstract.java    |   6 +-
 ...tributingFacetDerivedFromMixinFacetFactory.java |  20 +-
 .../ActionDefaultsFacetViaMethodFactory.java       |   2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |  30 +--
 ...tionPositionFacetForActionLayoutAnnotation.java |   2 +-
 .../CssClassFaFacetForActionLayoutAnnotation.java  |   2 +-
 .../PromptStyleFacetForActionLayoutAnnotation.java |   2 +-
 .../RedirectFacetFromActionLayoutAnnotation.java   |   4 +-
 ...viceMenuFacetDerivedFromDomainServiceFacet.java |   2 +-
 .../semantics/ActionSemanticsFacetAbstract.java    |   4 +-
 .../ActionParameterValidationFacetAbstract.java    |   4 +-
 .../validate/ActionValidationFacetAbstract.java    |   4 +-
 .../ActionParameterValidationFacetViaMethod.java   |   2 +-
 .../method/ActionValidationFacetViaMethod.java     |  12 +-
 .../ActionValidationFacetViaMethodFactory.java     |  12 +-
 .../facets/collections/CollectionFacet.java        |  36 ++--
 .../collections/CollectionFacetAbstract.java       |   2 +-
 .../CollectionAccessorFacetViaAccessor.java        |   4 +-
 .../CollectionAnnotationFacetFactory.java          |   4 +-
 .../javautilcollection/JavaArrayFacet.java         |   8 +-
 .../javautilcollection/JavaCollectionFacet.java    |  10 +-
 .../layout/CollectionLayoutFacetFactory.java       |   8 +-
 .../HiddenFacetForCollectionLayoutAnnotation.java  |   4 +-
 .../NamedFacetForCollectionLayoutAnnotation.java   |   2 +-
 .../layout/SortedByFacetForCollectionXml.java      |   4 +-
 .../annotation/SortedByFacetAnnotationFactory.java |  10 +-
 .../collparam/semantics/CollectionSemantics.java   |   4 +-
 .../facets/fallback/FallbackFacetFactory.java      |   4 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |  28 +--
 ...assFacetOnActionFromConfiguredRegexFactory.java |   6 +-
 .../facets/members/cssclassfa/CssClassFaFacet.java |  16 +-
 .../cssclassfa/CssClassFaFacetAbstract.java        |  36 ++--
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |   2 +-
 .../cssclassfa/annotprop/MixinInterceptor.java     |   4 +-
 .../annotprop/DescribedAsFacetOnMemberFactory.java |   2 +-
 .../method/DisableForContextFacetViaMethod.java    |   6 +-
 .../DisableForContextFacetViaMethodFactory.java    |   4 +-
 .../facets/members/hidden/HiddenFacetAbstract.java |  18 +-
 .../HideForContextFacetViaMethodFactory.java       |  18 +-
 .../members/layout/group/GroupIdAndName.java       |  44 ++--
 .../members/layout/group/LayoutGroupFacet.java     |  22 +-
 .../layout/group/LayoutGroupFacetAbstract.java     |  12 +-
 .../LayoutGroupFacetFromActionAnnotation.java      |   6 +-
 ...LayoutGroupFacetFromActionLayoutAnnotation.java |   6 +-
 ...youtGroupFacetFromPropertyLayoutAnnotation.java |   2 +-
 .../layout/group/LayoutGroupFacetFromXml.java      |  20 +-
 .../members/layout/order/LayoutOrderFacet.java     |  12 +-
 .../layout/order/LayoutOrderFacetAbstract.java     |  10 +-
 ...LayoutOrderFacetFromActionLayoutAnnotation.java |   6 +-
 ...utOrderFacetFromCollectionLayoutAnnotation.java |   6 +-
 ...youtOrderFacetFromPropertyLayoutAnnotation.java |   6 +-
 .../layout/order/LayoutOrderFacetFromXml.java      |   4 +-
 .../publish/command/CommandPublishingFacet.java    |  14 +-
 .../command/CommandPublishingFacetAbstract.java    |   4 +-
 .../CommandPublishingFacetForActionAnnotation.java |   2 +-
 ...onPublishingActionFacetForActionAnnotation.java |   2 +-
 ...ActionFacetForActionAnnotationAsConfigured.java |   2 +-
 ...tionPublishingActionFacetFromConfiguration.java |   2 +-
 .../ExecutionPublishingFacetAbstract.java          |   2 +-
 ...blishingPropertyFacetForPropertyAnnotation.java |   2 +-
 ...ertyFacetForPropertyAnnotationAsConfigured.java |   4 +-
 ...onPublishingPropertyFacetFromConfiguration.java |   2 +-
 .../ViewModelSemanticCheckingFacetFactory.java     |   8 +-
 .../autocomplete/AutoCompleteFacetAbstract.java    |   4 +-
 .../object/bookmarkpolicy/BookmarkPolicyFacet.java |   4 +-
 .../BookmarkPolicyFacetAbstract.java               |   4 +-
 .../BookmarkPolicyFacetFallbackFactory.java        |   4 +-
 .../callbacks/CreatedCallbackFacetFactory.java     |   2 +-
 .../PersistCallbackViaSaveMethodFacetFactory.java  |   2 +-
 .../RemoveCallbackViaDeleteMethodFacetFactory.java |   2 +-
 .../choices/ChoicesFacetFromBoundedAbstract.java   |  10 +-
 .../object/choices/enums/ChoicesFacetEnum.java     |   4 +-
 ...ingValueFacetUsingSemanticsProviderFactory.java |   6 +-
 ...ssClassFaFacetForDomainObjectLayoutFactory.java |  16 +-
 .../object/defaults/DefaultedFacetAbstract.java    |   4 +-
 .../object/defaults/DefaultsProviderUtil.java      |  34 ++--
 .../annotcfg/DefaultedFacetAnnotation.java         |  12 +-
 ...tedFacetAnnotationElseConfigurationFactory.java |   2 +-
 .../DisabledObjectFacetViaMethodFactory.java       |   2 +-
 .../DomainObjectAnnotationFacetFactory.java        |  14 +-
 ...itingEnabledFacetForDomainObjectAnnotation.java |   6 +-
 .../ImmutableFacetForDomainObjectAnnotation.java   |  10 +-
 ...gePublishingFacetForDomainObjectAnnotation.java |   8 +-
 ...tityChangePublishingFacetFromConfiguration.java |   4 +-
 ...atableObjectFacetForDomainObjectAnnotation.java |   2 +-
 ...PolicyFacetForDomainObjectLayoutAnnotation.java |   2 +-
 ...lassFaFacetForDomainObjectLayoutAnnotation.java |   2 +-
 ...sClassFacetForDomainObjectLayoutAnnotation.java |   4 +-
 ...ObjectLayoutAnnotationUsingCssClassUiEvent.java |   4 +-
 ...ibedAsFacetForDomainObjectLayoutAnnotation.java |   2 +-
 ...inObjectLayoutAnnotationUsingLayoutUiEvent.java |   6 +-
 .../PagedFacetForDomainObjectLayoutAnnotation.java |   4 +-
 ...PluralFacetForDomainObjectLayoutAnnotation.java |   4 +-
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |  26 +--
 .../object/domainservice/DomainServiceFacet.java   |  18 +-
 .../DomainServiceFacetAnnotationFactory.java       |   8 +-
 .../DomainServiceLayoutFacetFactory.java           |  10 +-
 .../object/encodeable/EncodableFacetAbstract.java  |   8 +-
 .../annotcfg/EncodableFacetFromConfiguration.java  |   2 +-
 .../facets/object/entity/EntityFacet.java          |  12 +-
 .../facets/object/entity/PersistenceStandard.java  |   4 +-
 .../facets/object/grid/GridFacetDefault.java       |  28 +--
 .../facets/object/grid/GridFacetFactory.java       |   6 +-
 .../hidden/method/HiddenObjectFacetViaMethod.java  |   4 +-
 .../metamodel/facets/object/icon/IconFacet.java    |   4 +-
 .../RemoveAnnotatedMethodsFacetFactory.java        |   4 +-
 .../ignore/javalang/RemoveMethodsFacetFactory.java |  15 +-
 .../object/immutable/EditingEnabledFacet.java      |   6 +-
 .../facets/object/immutable/ImmutableFacet.java    |   6 +-
 .../facets/object/layout/LayoutFacet.java          |   4 +-
 .../facets/object/layout/LayoutFacetFallback.java  |   2 +-
 .../mixin/MetaModelValidatorForMixinTypes.java     |  10 +-
 .../metamodel/facets/object/mixin/MixinFacet.java  |  10 +-
 .../facets/object/mixin/MixinFacetAbstract.java    |  10 +-
 .../mixin/MixinFacetForDomainObjectAnnotation.java |  20 +-
 .../NavigableParentAnnotationFacetFactory.java     |   6 +-
 .../objectspecid/ObjectSpecIdFacetAbstract.java    |   4 +-
 .../ObjectSpecIdMalformedValidator.java            |  22 +-
 .../impl/ObjectValidPropertiesFacetImpl.java       |   2 +-
 .../object/parseable/ParseableFacetAbstract.java   |   4 +-
 .../facets/object/parseable/ParserUtil.java        |   6 +-
 .../parser/ParseableFacetUsingParser.java          |   6 +-
 .../ProjectionFacetFromProjectingProperty.java     |   2 +-
 .../entitychange/EntityChangePublishingFacet.java  |  12 +-
 .../EntityChangePublishingFacetAbstract.java       |   6 +-
 .../EntityChangePublishingFacetImpl.java           |   2 +-
 .../RecreatableObjectFacetAbstract.java            |  12 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java |  22 +-
 .../recreatable/RecreatableObjectFacetFactory.java |  14 +-
 ...ableObjectFacetForXmlRootElementAnnotation.java |   2 +-
 .../annotation/TitleAnnotationFacetFactory.java    |   2 +-
 .../title/methods/TitleFacetViaMethodsFactory.java |   2 +-
 .../title/methods/TitleFacetViaTitleMethod.java    |  12 +-
 .../method/ValidateObjectFacetMethod.java          |   2 +-
 .../value/annotcfg/ValueFacetAnnotation.java       |  12 +-
 ...ValueFacetAnnotationOrConfigurationFactory.java |   6 +-
 .../annotcfg/ValueFacetFromConfiguration.java      |   6 +-
 .../vsp/ValueFacetUsingSemanticsProvider.java      |   2 +-
 .../ValueFacetUsingSemanticsProviderFactory.java   |   2 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    |   4 +-
 .../value/vsp/ValueSemanticsProviderUtil.java      |  28 +--
 .../facets/object/viewmodel/ViewModelFacet.java    |   6 +-
 .../objectvalue/choices/ChoicesFacetAbstract.java  |   2 +-
 .../mandatory/MandatoryFacetAbstract.java          |   4 +-
 .../multiline/MultiLineFacetAbstract.java          |   4 +-
 .../objectvalue/typicallen/TypicalLengthFacet.java |   8 +-
 .../ActionParameterAutoCompleteFacetAbstract.java  |   4 +-
 .../facets/param/autocomplete/MinLengthUtil.java   |   6 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |  10 +-
 ...ParameterAutoCompleteFacetViaMethodFactory.java |  14 +-
 ...ameterFromJavaxValidationAnnotationFactory.java |   2 +-
 .../ActionParameterChoicesFacetAbstract.java       |   4 +-
 .../choices/ActionParameterChoicesFacetNone.java   |   2 +-
 ...rameterChoicesFacetDerivedFromChoicesFacet.java |   2 +-
 ...ChoicesFacetDerivedFromChoicesFacetFactory.java |   2 +-
 .../method/ActionChoicesFacetViaMethod.java        |   8 +-
 .../method/ActionChoicesFacetViaMethodFactory.java |  14 +-
 .../ActionParameterChoicesFacetViaMethod.java      |  14 +-
 ...ctionParameterChoicesFacetViaMethodFactory.java |  16 +-
 .../defaults/ActionParameterDefaultsFacet.java     |   6 +-
 .../ActionParameterDefaultsFacetAbstract.java      |   4 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |  18 +-
 ...tionParameterDefaultsFacetViaMethodFactory.java |  18 +-
 .../disable/ActionParameterDisabledFacet.java      |   2 +-
 .../ActionParameterDisabledFacetAbstract.java      |   4 +-
 .../ActionParameterDisabledFacetViaMethod.java     |  12 +-
 ...tionParameterDisabledFacetViaMethodFactory.java |  18 +-
 .../param/hide/ActionParameterHiddenFacet.java     |   2 +-
 .../hide/ActionParameterHiddenFacetAbstract.java   |  10 +-
 .../ActionParameterHiddenFacetViaMethod.java       |   8 +-
 ...ActionParameterHiddenFacetViaMethodFactory.java |  16 +-
 .../param/layout/ParameterLayoutFacetFactory.java  |   4 +-
 .../NamedFacetForParameterUsingReflection.java     |   2 +-
 .../ParameterNameFacetFactoryUsingReflection.java  |   8 +-
 .../parameter/ParameterAnnotationFacetFactory.java |   4 +-
 ...cetInvertedByNullableAnnotationOnParameter.java |   6 +-
 ...fySpecificationFacetForParameterAnnotation.java |   4 +-
 .../validate/ActionParameterValidationFacet.java   |  10 +-
 .../ActionParameterValidationFacetAbstract.java    |   4 +-
 .../ActionParameterValidationFacetViaMethod.java   |  22 +-
 ...onParameterValidationFacetViaMethodFactory.java |  16 +-
 .../PropertyAccessorFacetViaAccessorFactory.java   |   4 +-
 .../method/PropertyAutoCompleteFacetMethod.java    |   8 +-
 .../PropertyAutoCompleteFacetMethodFactory.java    |  12 +-
 ...FromJavaxValidationDigitsAnnotationFactory.java |   2 +-
 .../method/PropertyChoicesFacetViaMethod.java      |  12 +-
 .../PropertyChoicesFacetViaMethodFactory.java      |   8 +-
 ...PropertyDefaultFacetDerivedFromTypeFactory.java |   2 +-
 .../PropertyDefaultFacetViaMethodFactory.java      |   6 +-
 ...isabledFacetOnPropertyDerivedFromImmutable.java |   6 +-
 ...FacetOnPropertyDerivedFromImmutableFactory.java |   6 +-
 .../ProjectingFacetFromPropertyAnnotation.java     |   6 +-
 .../property/PropertyAnnotationFacetFactory.java   |   4 +-
 .../DisabledFacetForPropertyAnnotation.java        |   2 +-
 ...acetInvertedByNullableAnnotationOnProperty.java |   4 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |   7 +-
 ...sfySpecificationFacetForPropertyAnnotation.java |   4 +-
 .../RegExFacetForPatternAnnotationOnProperty.java  |   2 +-
 .../MultiLineFacetForPropertyLayoutAnnotation.java |   2 +-
 .../MultiLineFacetForPropertyXml.java              |   4 +-
 .../NamedFacetForPropertyLayoutAnnotation.java     |   2 +-
 ...romptStyleFacetForPropertyLayoutAnnotation.java |   2 +-
 .../propertylayout/PropertyLayoutFacetFactory.java |  30 +--
 .../RenderedAdjustedFacetForPropertyXml.java       |   2 +-
 .../update/PropertySetterFacetFactory.java         |   2 +-
 .../update/clear/PropertyClearFacet.java           |   2 +-
 .../clear/PropertyClearFacetViaSetterMethod.java   |   2 +-
 .../modify/PropertySetterFacetViaSetterMethod.java |   2 +-
 .../method/PropertyValidateFacetViaMethod.java     |   2 +-
 .../PropertyValidateFacetViaMethodFactory.java     |   2 +-
 .../facets/schema/chg/ChangesDtoValueFacet.java    |   2 +-
 .../facets/schema/cmd/CommandDtoValueFacet.java    |   2 +-
 .../schema/ixn/InteractionDtoValueFacet.java       |   2 +-
 .../ValueSemanticsProviderAbstractTemporal.java    |   4 +-
 .../BigDecimalValueSemanticsProvider.java          |   4 +-
 .../value/blobs/BlobValueSemanticsProvider.java    |   6 +-
 .../facets/value/bytes/ByteValueFacet.java         |   2 +-
 .../bytes/ByteValueSemanticsProviderAbstract.java  |   4 +-
 .../chars/CharPrimitiveValueSemanticsProvider.java |   2 +-
 .../facets/value/chars/CharValueFacet.java         |   2 +-
 .../value/clobs/ClobValueSemanticsProvider.java    |   4 +-
 .../JodaLocalDateValueSemanticsProvider.java       |   2 +-
 .../JodaLocalDateTimeValueSemanticsProvider.java   |   4 +-
 .../doubles/DoubleFloatingPointValueFacet.java     |   2 +-
 .../DoubleValueSemanticsProviderAbstract.java      |   4 +-
 .../DoubleWrapperValueSemanticsProvider.java       |   2 +-
 .../facets/value/image/ImageValueFacet.java        |   6 +-
 .../image/ImageValueSemanticsProviderAbstract.java |  22 +-
 ...ageValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../JavaAwtImageValueSemanticsProvider.java        |  18 +-
 .../facets/value/integer/IntegerValueFacet.java    |   2 +-
 .../localrespath/LocalResourcePathValueFacet.java  |   2 +-
 .../facets/value/longs/LongValueFacet.java         |   2 +-
 .../facets/value/markup/MarkupValueFacet.java      |   2 +-
 .../value/markup/MarkupValueSemanticsProvider.java |   4 +-
 .../password/PasswordValueSemanticsProvider.java   |   4 +-
 .../facets/value/shortint/ShortValueFacet.java     |   2 +-
 .../value/string/StringValueSemanticsProvider.java |   4 +-
 .../facets/value/temporal/TemporalAdjust.java      |  28 +--
 .../facets/value/temporal/TemporalAdjustUtil.java  |  22 +-
 .../facets/value/temporal/TemporalValueFacet.java  |  18 +-
 ...ralValueFacetUsingSemanticsProviderFactory.java |  10 +-
 .../TemporalValueSemanticsProviderAbstract.java    |  68 +++----
 ...ateValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../localdate/LocalDateValueSemanticsProvider.java |  10 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../LocalDateTimeValueSemanticsProvider.java       |  12 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../localtime/LocalTimeValueSemanticsProvider.java |  10 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../OffsetDateTimeValueSemanticsProvider.java      |  14 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../OffsetTimeValueSemanticsProvider.java          |  12 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   2 +-
 .../ZonedDateTimeValueSemanticsProvider.java       |  16 +-
 .../metamodel/facets/value/url/URLValueFacet.java  |   2 +-
 .../facets/value/uuid/UUIDValueFacet.java          |   2 +-
 .../inspect/IsisModuleCoreMetamodelInspection.java |   2 +-
 .../core/metamodel/inspect/model/ActionNode.java   |  32 +--
 .../metamodel/inspect/model/CollectionNode.java    |  24 ++-
 .../metamodel/inspect/model/FacetAttrNode.java     |  24 ++-
 .../metamodel/inspect/model/FacetGroupNode.java    |  24 ++-
 .../core/metamodel/inspect/model/FacetNode.java    |  20 +-
 .../isis/core/metamodel/inspect/model/MMNode.java  |  14 +-
 .../metamodel/inspect/model/MMNodeFactory.java     |   8 +-
 .../metamodel/inspect/model/ParameterNode.java     |  20 +-
 .../core/metamodel/inspect/model/PropertyNode.java |  24 ++-
 .../core/metamodel/inspect/model/TypeNode.java     |  28 ++-
 .../interactions/ActionArgUsabilityContext.java    |  20 +-
 .../interactions/ActionArgValidityContext.java     |  20 +-
 .../interactions/ActionArgVisibilityContext.java   |  24 +--
 .../interactions/ActionUsabilityContext.java       |   4 +-
 .../interactions/ActionValidityContext.java        |   4 +-
 .../interactions/ActionVisibilityContext.java      |   4 +-
 .../interactions/CollectionUsabilityContext.java   |   2 +-
 .../interactions/CollectionVisibilityContext.java  |   2 +-
 .../metamodel/interactions/InteractionContext.java |  20 +-
 .../interactions/InteractionEventSupplier.java     |   4 +-
 .../metamodel/interactions/InteractionHead.java    |  24 +--
 .../metamodel/interactions/InteractionUtils.java   |  34 ++--
 .../metamodel/interactions/ObjectTitleContext.java |   6 +-
 .../interactions/ObjectValidityContext.java        |   6 +-
 .../interactions/ObjectVisibilityContext.java      |   8 +-
 .../metamodel/interactions/ParseValueContext.java  |   6 +-
 .../interactions/PropertyAccessContext.java        |   6 +-
 .../interactions/PropertyModifyContext.java        |   4 +-
 .../interactions/PropertyUsabilityContext.java     |   2 +-
 .../metamodel/interactions/UsabilityContext.java   |   2 +-
 .../interactions/ValidatingInteractionAdvisor.java |   2 +-
 .../metamodel/interactions/ValidityContext.java    |   2 +-
 .../metamodel/interactions/VisibilityContext.java  |   2 +-
 .../interactions/managed/ActionInteraction.java    |  36 ++--
 .../managed/ActionInteractionHead.java             |  72 +++----
 .../managed/CollectionInteraction.java             |  24 +--
 .../interactions/managed/HasMetaModel.java         |   2 +-
 .../interactions/managed/InteractionVeto.java      |  38 ++--
 .../interactions/managed/ManagedAction.java        |  68 +++----
 .../interactions/managed/ManagedCollection.java    |  28 +--
 .../interactions/managed/ManagedFeature.java       |  34 ++--
 .../interactions/managed/ManagedMember.java        |  71 +++----
 .../interactions/managed/ManagedParameter.java     |  23 ++-
 .../interactions/managed/ManagedValue.java         |   4 +-
 .../interactions/managed/MemberInteraction.java    |  40 ++--
 .../managed/ParameterNegotiationModel.java         | 102 +++++-----
 .../interactions/managed/PropertyInteraction.java  |  24 +--
 .../managed/PropertyNegotiationModel.java          |  38 ++--
 .../isis/core/metamodel/layout/DeweyOrderSet.java  |   2 +-
 .../core/metamodel/layout/LayoutFacetUtil.java     |  28 +--
 .../memberorderfacet/MemberOrderComparator.java    |   4 +-
 ...nnotationEnforcesSupportingMethodValidator.java |   2 +-
 .../core/metamodel/methods/MethodByClassMap.java   |   4 +-
 .../isis/core/metamodel/methods/MethodFinder.java  |  64 +++---
 .../core/metamodel/methods/MethodFinderUtils.java  |  82 ++++----
 .../metamodel/methods/MethodLiteralConstants.java  |  46 ++---
 .../MethodPrefixBasedFacetFactoryAbstract.java     |  40 ++--
 .../methods/OrphanedSupportingMethodValidator.java |  16 +-
 .../metamodel/objectmanager/ObjectManager.java     |  26 +--
 .../objectmanager/ObjectManagerDefault.java        |  10 +-
 .../objectmanager/create/ObjectCreator.java        |  32 +--
 .../create/ObjectCreator_builtinHandlers.java      | 118 +++++------
 .../objectmanager/detach/ObjectDetacher.java       |  16 +-
 .../detach/ObjectDetacher_builtinHandlers.java     |  34 ++--
 .../objectmanager/identify/ObjectBookmarker.java   |  16 +-
 .../identify/ObjectBookmarker_builtinHandlers.java |   2 +-
 .../metamodel/objectmanager/load/ObjectLoader.java |  30 +--
 .../load/ObjectLoader_builtinHandlers.java         |  82 ++++----
 .../objectmanager/query/ObjectBulkLoader.java      |  26 +--
 .../query/ObjectBulkLoader_builtinHandlers.java    |  38 ++--
 .../objectmanager/refresh/ObjectRefresher.java     |  18 +-
 .../refresh/ObjectRefresher_builtinHandlers.java   |  40 ++--
 .../objectmanager/serialize/ObjectSerializer.java  |  16 +-
 .../ObjectSerializer_builtinHandlers.java          |  22 +-
 .../ObjectSpecificationPostProcessorAbstract.java  |   4 +-
 .../DeriveDisabledFromImmutablePostProcessor.java  |   2 +-
 .../progmodel/ProgrammingModelService.java         |   4 +-
 .../metamodel/services/ServiceInjectorDefault.java |  12 +-
 .../isis/core/metamodel/services/ServiceUtil.java  |   4 +-
 .../appfeat/ApplicationFeatureDefault.java         |  10 +-
 .../core/metamodel/services/appfeat/_Asserts.java  |   2 +-
 .../classsubstitutor/ClassSubstitutor.java         |  44 ++--
 .../classsubstitutor/ClassSubstitutorAbstract.java |   2 +-
 .../classsubstitutor/ClassSubstitutorDefault.java  |   2 +-
 .../ClassSubstitutorForCollections.java            |   2 +-
 .../ClassSubstitutorForDomainObjects.java          |  14 +-
 .../classsubstitutor/ClassSubstitutorRegistry.java |  16 +-
 .../services/events/MetamodelEventService.java     |   6 +-
 .../services/grid/GridReaderUsingJaxb.java         |   6 +-
 .../services/grid/GridServiceDefault.java          |  10 +-
 .../services/layout/LayoutServiceDefault.java      |   2 +-
 .../services/message/MessageServiceNoop.java       |   2 +-
 .../services/metamodel/DomainMemberDefault.java    |   8 +-
 .../services/metamodel/DomainModelDefault.java     |   2 +-
 .../services/metamodel/MetaModelExportSupport.java |   6 +-
 .../services/registry/ServiceRegistryDefault.java  |  18 +-
 .../services/title/TitleServiceDefault.java        |  24 +--
 .../title/TitlesAndTranslationsValidator.java      |  56 ++---
 .../isis/core/metamodel/spec/Hierarchical.java     |   2 +-
 .../core/metamodel/spec/feature/CurrentHolder.java |   2 +-
 .../isis/core/metamodel/spec/feature/MixedIn.java  |   6 +-
 .../spec/feature/MutableCurrentHolder.java         |   2 +-
 .../metamodel/spec/feature/ObjectAssociation.java  |   2 +-
 .../metamodel/specloader/LogicalTypeResolver.java  |   4 +-
 .../specloader/LogicalTypeResolverDefault.java     |   6 +-
 .../specloader/ProgrammingModelServiceDefault.java |  26 +--
 .../metamodel/specloader/SpecificationCache.java   |   2 +-
 .../specloader/SpecificationCacheDefault.java      |  12 +-
 .../metamodel/specloader/SpecificationLoader.java  |  60 +++---
 .../specloader/SpecificationLoaderDefault.java     | 138 ++++++-------
 .../SpecificationLoaderDefault_debug.java          |  18 +-
 .../specloader/specimpl/FacetedMethodsBuilder.java | 119 +++++------
 .../metamodel/specloader/specimpl/Factories.java   |   8 +-
 .../specloader/specimpl/MemberSortingUtils.java    |   4 +-
 .../specimpl/ObjectActionParameterAbstract.java    |  62 +++---
 .../specimpl/OneToManyActionParameterDefault.java  |   4 +-
 .../specimpl/OneToOneActionParameterDefault.java   |   4 +-
 .../specloader/typeextract/TypeExtractor.java      |  38 ++--
 .../validator/MetaModelInvalidException.java       |   2 +-
 .../specloader/validator/MetaModelValidator.java   |   2 +-
 .../validator/MetaModelValidatorAbstract.java      |   8 +-
 ...ModelValidatorForAmbiguousMixinAnnotations.java |  12 +-
 ...etaModelValidatorForConflictingOptionality.java |   8 +-
 .../validator/MetaModelVisitingValidator.java      |   8 +-
 .../MetaModelVisitingValidatorAbstract.java        |  10 +-
 .../specloader/validator/ValidationFailure.java    |  28 +--
 .../specloader/validator/ValidationFailures.java   |  10 +-
 .../apache/isis/core/metamodel/util/EventUtil.java |   2 +-
 .../metamodel/util/pchain/ParentChainDefault.java  |   2 +-
 .../core/metamodel/util/snapshot/XmlSchema.java    |  26 +--
 .../valuetypes/ValueTypeProviderForBuiltin.java    |   2 +-
 .../isis/core/runtime/IsisModuleCoreRuntime.java   |   2 +-
 .../core/runtime/context/IsisAppCommonContext.java |  62 +++---
 .../isis/core/runtime/context/RuntimeContext.java  |   6 +-
 .../core/runtime/context/RuntimeContextBase.java   |  20 +-
 .../core/runtime/events/MetamodelEventService.java |  18 +-
 .../runtime/events/TransactionEventEmitter.java    |   8 +-
 .../org/apache/isis/core/runtime/events/_Xray.java |  54 ++---
 .../runtime/memento/ObjectMementoCollection.java   |   8 +-
 .../runtime/memento/ObjectMementoForEmpty.java     |   4 +-
 .../core/runtime/memento/ObjectMementoService.java |   4 +-
 .../bookmarks/BookmarkServiceDefault.java          |  16 +-
 .../runtimeservices/email/EmailServiceDefault.java |   6 +-
 .../executor/MemberExecutorServiceDefault.java     |   6 +-
 .../isis/core/runtimeservices/executor/_Xray.java  |  56 ++---
 .../factory/FactoryServiceDefault.java             |  34 ++--
 .../homepage/HomePageResolverServiceDefault.java   |   6 +-
 .../isis/core/runtimeservices/i18n/po/Block.java   |   1 -
 .../i18n/po/TranslationServicePoMenu.java          |  14 +-
 .../interaction/InteractionDtoFactoryDefault.java  |   2 +-
 .../menubars/MenuBarsLoaderServiceDefault.java     |  10 +-
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |  26 +--
 .../menubars/bootstrap3/ServiceAndAction.java      |   2 +-
 .../message/MessageServiceDefault.java             |   8 +-
 .../publish/CommandPublisherDefault.java           |  30 +--
 .../publish/EntityChangesPublisherDefault.java     |  23 ++-
 .../EntityPropertyChangePublisherDefault.java      |  30 +--
 .../publish/ExecutionPublisherDefault.java         |  16 +-
 .../isis/core/runtimeservices/publish/_Xray.java   | 138 ++++++-------
 .../ExceptionRecognizerForDataAccessException.java |  26 +--
 .../repository/RepositoryServiceDefault.java       |  16 +-
 .../routing/RoutingServiceDefault.java             |   2 +-
 .../scratchpad/ScratchpadDefault.java              |   2 +
 .../runtimeservices/session/AnonymousSession.java  |   4 +-
 .../session/InteractionFactoryDefault.java         | 108 +++++-----
 .../isis/core/runtimeservices/session/_Xray.java   |  52 ++---
 .../transaction/TransactionServiceSpring.java      | 126 ++++++------
 .../user/ImpersonateMenuAdvisorDefault.java        |   1 -
 .../user/ImpersonatedUserHolderDefault.java        |   1 -
 .../userreg/EmailNotificationServiceDefault.java   |   2 +-
 .../InteractionEventDispatcherTypeSafe.java        |   2 +-
 .../AbstractCollectionInvocationHandler.java       |   8 +-
 .../handlers/CollectionInvocationHandler.java      |   2 +-
 .../DelegatingInvocationHandlerDefault.java        |  14 +-
 .../wrapper/handlers/ProxyContextHandler.java      |  24 +--
 .../runtimeservices/xml/XmlServiceDefault.java     |   2 +-
 .../xmlsnapshot/XmlSnapshotServiceDefault.java     |   8 +-
 .../isis/core/security/IsisModuleCoreSecurity.java |   4 +-
 .../authentication/AuthenticationAbstract.java     |  16 +-
 .../authentication/AuthenticationContext.java      |  16 +-
 .../AuthenticationRequestLogonFixture.java         |   4 +-
 .../health/HealthAuthentication.java               |   4 +-
 .../authentication/logout/LogoutHandler.java       |  16 +-
 .../security/authentication/logout/LogoutMenu.java |  27 +--
 .../singleuser/SingleUserAuthentication.java       |   4 +-
 .../standard/RandomCodeGeneratorDefault.java       |   2 +-
 .../standard/SimpleAuthentication.java             |  14 +-
 .../apache/isis/core/security/util/XrayUtil.java   |  34 ++--
 .../transaction/IsisModuleCoreTransaction.java     |   2 +-
 .../changetracking/EntityChangeTrackerDefault.java |  16 +-
 .../changetracking/HasEnlistedEntityChanges.java   |   2 +-
 .../changetracking/_ChangingEntitiesFactory.java   |   4 +-
 .../changetracking/_PreAndPostValue.java           |  16 +-
 .../changetracking/_PropertyChangeRecord.java      |  16 +-
 .../core/transaction/changetracking/_Xray.java     |  56 ++---
 .../events/IsisTransactionPlaceholder.java         |   2 +-
 .../changetracking/events/PostStoreEvent.java      |   4 +-
 .../changetracking/events/PreStoreEvent.java       |   4 +-
 .../events/TransactionAfterCompletionEvent.java    |  12 +-
 .../events/TransactionBeforeCompletionEvent.java   |   6 +-
 .../isis/core/webapp/IsisModuleCoreWebapp.java     |   8 +-
 .../ImpersonatedUserHolderUsingHttpSession.java    |  48 +++--
 .../apache/isis/core/webapp/modules/WebModule.java |  26 +--
 .../core/webapp/modules/WebModuleAbstract.java     |   4 +-
 .../isis/core/webapp/modules/WebModuleContext.java |  10 +-
 .../modules/logonlog/IsisLogOnExceptionFilter.java |  14 +-
 .../logonlog/WebModuleLogOnExceptionLogger.java    |   2 +-
 .../TemplateResourceCachingFilter.java             |   6 +-
 .../templresources/TemplateResourceServlet.java    |  14 +-
 ...plateResourceServlet_HtmlTemplateVariables.java |   4 +-
 .../templresources/WebModuleTemplateResources.java |   2 +-
 .../core/webapp/routing/ForwardingServlet.java     |   4 +-
 .../isis/core/webapp/routing/RedirectServlet.java  |   2 +-
 .../webappctx/IsisWebAppContextInitializer.java    |  30 +--
 .../dom/_infra/LibraryPreloadingService.java       |   4 +-
 .../HasAsciiDocDescription_description.java        |   2 +-
 .../HasAsciiDocDescription_sources.java            |   2 +-
 .../dom/_infra/fixtures/DemoFixtureScript.java     |   4 -
 .../DemoFixtureScriptSpecificationProvider.java    |   2 -
 .../_infra/resources/AsciiDocReaderService.java    |   4 +-
 .../resources/MarkupVariableResolverService.java   |   4 +-
 .../demoapp/dom/_infra/samples/NameSamples.java    |   4 -
 .../java/demoapp/dom/_infra/seed/SeedService.java  |   4 -
 .../UrlEncodingServiceNaiveInMemory.java           |  24 +--
 ...utionListenerToCaptureInteractionsInMemory.java |   1 -
 .../dom/domain/_interactions/InteractionDtoVm.java |   2 +-
 .../ActionLayoutPositionVm_annotatedBelow.java     |   4 +-
 .../ActionLayoutPositionVm_annotatedPanel.java     |   4 +-
 ...ionLayoutPositionVm_annotatedPanelDropDown.java |   4 +-
 .../ActionLayoutPositionVm_annotatedRight.java     |   4 +-
 .../ActionLayoutPositionVm_layoutBelow.java        |   2 +-
 .../ActionLayoutPositionVm_layoutPanel.java        |   2 +-
 ...ActionLayoutPositionVm_layoutPanelDropDown.java |   2 +-
 .../ActionLayoutPositionVm_layoutRight.java        |   2 +-
 .../ActionLayoutPromptStyleVm_annotatedInline.java |   4 +-
 ...ayoutPromptStyleVm_annotatedInlineAsIfEdit.java |   4 +-
 .../ActionLayoutPromptStyleVm_annotatedModal.java  |   4 +-
 ...ActionLayoutPromptStyleVm_annotatedSidebar.java |   4 +-
 ...omainObjectEntityChangePublishingVm_create.java |   2 +-
 ...omainObjectEntityChangePublishingVm_delete.java |   2 +-
 ...inObjectEntityChangePublishingVm_updateAll.java |   2 +-
 .../other/mixins/CountHolder_explanation.java      |   2 +-
 .../core/messageservice/MessageServiceDemoVm.java  |   4 +-
 .../dom/types/isis/markups/vm/IsisMarkupVm.java    |   2 +-
 .../asciidocs/holder/IsisAsciiDocHolder2.java      |   8 +-
 .../types/isisext/markdowns/vm/IsisMarkdownVm.java |   2 +-
 .../booleans/holder/WrapperBooleanHolder2.java     |   6 +-
 .../holder/JodaLocalDateTimeHolder2.java           |   2 +-
 .../jodalocaltime/holder/JodaLocalTimeHolder2.java |   2 +-
 .../samples/JodaLocalTimeSamples.java              |   2 +-
 .../main/java/demoapp/javafx/DemoAppJavaFx.java    |   8 +-
 .../java/demoapp/webapp/vaadin/DemoAppVaadin.java  |  14 +-
 .../java/demoapp/web/DemoAppManifestCommon.java    |   6 +-
 .../main/java/demoapp/web/DemoAppManifestJdo.java  |   2 +-
 .../main/java/demoapp/web/DemoAppManifestJpa.java  |   2 +-
 .../web/_infra/utils/ThereCanBeOnlyOne.java        |  20 +-
 .../java/demoapp/web/linebreaker/LineBreaker.java  |   4 +-
 .../webapp/wicket/jdo/DemoAppWicketJdo.java        |   6 +-
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |   8 +-
 .../model/IsisModuleExtCommandLogApplib.java       |  14 +-
 .../commandlog/model/command/CommandModel.java     |  22 +-
 .../model/command/CommandModelRepository.java      |   8 +-
 .../commandlog/jdo/IsisModuleExtCommandLogJdo.java |   6 +-
 .../commandlog/jdo/entities/CommandJdo.java        |  10 +-
 .../jdo/entities/CommandJdo_childCommands.java     |   2 +-
 .../commandlog/jdo/entities/CommandJdo_retry.java  |   2 +-
 .../jdo/entities/CommandJdo_siblingCommands.java   |   2 +-
 .../jdo/mixins/Object_recentCommands.java          |   2 +-
 .../commandlog/jdo/ui/CommandServiceMenu.java      |   6 +-
 .../commandlog/jpa/IsisModuleExtCommandLogJpa.java |   4 +-
 .../commandlog/jpa/entities/CommandJpa.java        |  11 +-
 .../jpa/entities/CommandJpaRepository.java         |   2 +-
 .../primary/IsisModuleExtCommandReplayPrimary.java |   2 +
 .../primary/mixins/Object_openOnSecondary.java     |   1 -
 .../primary/restapi/CommandRetrievalService.java   |   6 +-
 .../primary/ui/CommandReplayOnPrimaryService.java  |   4 +-
 .../IsisModuleExtCommandReplaySecondary.java       |   4 +-
 .../secondary/job/ReplicateAndReplayJob.java       |   1 +
 .../jobcallables/ReplicateAndRunCommands.java      |   2 +-
 .../secondary/mixins/Object_openOnPrimary.java     |   1 -
 .../ui/CommandReplayOnSecondaryService.java        |   4 +-
 .../flyway/impl/IsisModuleExtFlywayImpl.java       |   7 -
 .../spring/AutowiringSpringBeanJobFactory.java     |   1 +
 .../secman/api/IsisModuleExtSecmanApi.java         |   2 +
 .../extensions/secman/api/SecmanConfiguration.java | 150 ++++++++++++--
 .../api/feature/dom/ApplicationFeatureChoices.java |   6 +-
 .../feature/dom/ApplicationFeatureViewModel.java   |   6 +-
 .../feature/dom/ApplicationFeatureViewModels.java  |   8 +-
 .../api/feature/dom/ApplicationNamespace.java      |   7 +-
 .../secman/api/feature/dom/ApplicationType.java    |  13 +-
 .../api/feature/dom/ApplicationTypeAction.java     |  11 +-
 .../api/feature/dom/ApplicationTypeCollection.java |  11 +-
 .../api/feature/dom/ApplicationTypeMember.java     |   9 +-
 ...l => ApplicationTypeMember.layout.fallback.xml} |   0
 .../api/feature/dom/ApplicationTypeProperty.java   |   7 +-
 .../app/ApplicationOrphanedPermissionManager.java  |   6 +-
 ...OrphanedPermissionManager_relocateSelected.java |   5 +-
 .../api/permission/dom/ApplicationPermission.java  |   6 +-
 .../ApplicationPermissionRepositoryAbstract.java   |   1 +
 .../dom/mixins/ApplicationPermission_allow.java    |   4 +-
 .../dom/mixins/ApplicationPermission_changing.java |   4 +-
 .../dom/mixins/ApplicationPermission_delete.java   |   2 +-
 .../dom/mixins/ApplicationPermission_feature.java  |   2 +-
 .../mixins/ApplicationPermission_updateRole.java   |   2 +-
 .../dom/mixins/ApplicationPermission_veto.java     |   4 +-
 .../dom/mixins/ApplicationPermission_viewing.java  |   4 +-
 .../permission/menu/ApplicationPermissionMenu.java |  12 +-
 .../secman/api/role/dom/ApplicationRole.java       |   7 +-
 .../dom/mixins/ApplicationRole_addPermission.java  |  16 +-
 .../role/dom/mixins/ApplicationRole_addUser.java   |   4 +-
 .../role/dom/mixins/ApplicationRole_delete.java    |   4 +-
 .../mixins/ApplicationRole_removePermissions.java  |   5 +-
 .../dom/mixins/ApplicationRole_removeUsers.java    |   5 +-
 .../mixins/ApplicationRole_updateDescription.java  |   5 +-
 .../dom/mixins/ApplicationRole_updateName.java     |   4 +-
 .../secman/api/role/menu/ApplicationRoleMenu.java  |   8 +-
 .../secman/api/tenancy/dom/ApplicationTenancy.java |   6 +
 .../dom/mixins/ApplicationTenancy_addChild.java    |   4 +-
 .../dom/mixins/ApplicationTenancy_addUser.java     |   4 +-
 .../dom/mixins/ApplicationTenancy_delete.java      |   4 +-
 .../dom/mixins/ApplicationTenancy_removeChild.java |   4 +-
 .../dom/mixins/ApplicationTenancy_removeUser.java  |   4 +-
 .../dom/mixins/ApplicationTenancy_updateName.java  |   4 +-
 .../api/tenancy/menu/ApplicationTenancyMenu.java   |   8 +-
 .../api/user/app/ApplicationUserManager.java       |  13 +-
 .../ApplicationUserManager_newDelegateUser.java    |  13 +-
 .../ApplicationUserManager_newLocalUser.java       |  13 +-
 ...pplicationUserManager_newLocalUserAbstract.java |  15 --
 .../api/user/contributions/HasUsername_open.java   |  10 +-
 .../secman/api/user/dom/ApplicationUser.java       |   8 +
 .../api/user/dom/ApplicationUserRepository.java    |   1 -
 .../user/dom/mixins/ApplicationUser_addRole.java   |   2 +-
 .../user/dom/mixins/ApplicationUser_delete.java    |   4 +-
 .../user/dom/mixins/ApplicationUser_duplicate.java |   8 +-
 .../api/user/dom/mixins/ApplicationUser_lock.java  |   6 +-
 .../dom/mixins/ApplicationUser_removeRoles.java    |   8 +-
 .../dom/mixins/ApplicationUser_resetPassword.java  |   5 +-
 .../user/dom/mixins/ApplicationUser_unlock.java    |   6 +-
 .../mixins/ApplicationUser_updateAccountType.java  |   7 +-
 .../dom/mixins/ApplicationUser_updateAtPath.java   |   5 +-
 .../mixins/ApplicationUser_updateEmailAddress.java |   4 +-
 .../mixins/ApplicationUser_updateFaxNumber.java    |   4 +-
 .../dom/mixins/ApplicationUser_updateName.java     |   5 +-
 .../dom/mixins/ApplicationUser_updatePassword.java |   5 +-
 .../mixins/ApplicationUser_updatePhoneNumber.java  |   4 +-
 .../dom/mixins/ApplicationUser_updateUsername.java |   3 +-
 .../perms/ApplicationUser_filterPermissions.java   |  15 +-
 .../dom/mixins/perms/UserPermissionViewModel.java  |  54 ++---
 .../secman/api/user/menu/ApplicationUserMenu.java  | 157 +++-----------
 .../extensions/secman/api/user/menu/MeService.java |   8 +-
 .../extensions/secman/api/util/RegexReplacer.java  |   6 -
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |  89 --------
 .../scripts/SeedUsersAndRolesFixtureScript.java    |  28 ++-
 ...IsisApplibConfigurationRoleAndPermissions.java} |  25 ++-
 .../IsisApplibMetaModelRoleAndPermissions.java}    |  22 +-
 .../IsisApplibTranslationRoleAndPermissions.java}  |  21 +-
 .../IsisExtFixturesRoleAndPermissions.java}        |  17 +-
 .../IsisExtH2ConsoleRoleAndPermissions.java}       |  18 +-
 ...PersistenceJdoMetaModelRoleAndPermissions.java} |  23 ++-
 .../IsisSudoImpersonateRoleAndPermissions.java}    |  22 +-
 ...erRestfulObjectsSwaggerRoleAndPermissions.java} |  24 ++-
 .../seed/scripts/{ => secman}/GlobalTenancy.java   |   2 +-
 .../IsisExtSecmanAdminRoleAndPermissions.java      |  20 +-
 .../{ => secman}/IsisExtSecmanAdminUser.java       |   3 +-
 ...IsisExtSecmanRegularUserRoleAndPermissions.java | 115 +++++++++++
 .../secman/jdo/package.jdo~breaks-mvn-build        |  22 +-
 .../jdo/permission/dom/ApplicationPermission.java  |  19 +-
 .../secman/jdo/role/dom/ApplicationRole.java       |  10 +-
 .../secman/jdo/tenancy/dom/ApplicationTenancy.java |  11 +-
 .../secman/jdo/user/dom/ApplicationUser.java       |  20 +-
 .../jdo/user/dom/ApplicationUserRepository.java    |   2 -
 .../extensions/secman/jdo/util/RegexReplacer.java  |   4 -
 .../jpa/permission/dom/ApplicationPermission.java  |   5 +-
 .../dom/ApplicationPermissionRepository.java       |   3 +-
 .../secman/jpa/role/dom/ApplicationRole.java       |   4 +-
 .../secman/jpa/tenancy/dom/ApplicationTenancy.java |   2 +-
 .../secman/jpa/user/dom/ApplicationUser.java       |   3 +-
 .../jpa/user/dom/ApplicationUserRepository.java    |   3 -
 .../extensions/secman/jpa/util/RegexReplacer.java  |   2 -
 .../secman/shiro/AuthInfoForApplicationUser.java   |  16 +-
 ...ticationStrategyForIsisModuleSecurityRealm.java |  14 +-
 .../shiro/IsisModuleExtSecmanShiroRealm.java       |   1 -
 ...lCollectionForApplicationUserOnSingleRealm.java |   6 +-
 ...inglePrincipalForApplicationUserInAnyRealm.java |   2 +-
 .../ui/components/CollectionContentsAsExcel.java   |   2 +-
 .../ui/components/ExcelFileModel.java              |  54 ++---
 .../ui/component/CalendaredCollectionAbstract.java |  14 +-
 .../CalendaredCollectionFactoryAbstract.java       |   4 +-
 .../ui/component/EventProviderAbstract.java        |  10 +-
 .../component/FullCalendarWithEventHandling.java   |  12 +-
 .../CalendarableCollectionAsFullCalendar.java      |   2 +-
 ...alendarableCollectionAsFullCalendarFactory.java |   3 +-
 .../CalendarEventableCollectionAsFullCalendar.java |   2 +-
 ...arEventableCollectionAsFullCalendarFactory.java |   3 +-
 .../metamodel/facet/PdfJsViewerFacetAbstract.java  |   5 +-
 .../facet/PdfJsViewerFacetFromAnnotation.java      |   7 +-
 .../PdfJsViewerFacetFromAnnotationFactory.java     |   1 -
 .../pdfjs/ui/components/PdfJsViewerPanel.java      |  12 +-
 .../PdfJsViewerPanelComponentFactory.java          |   2 +
 .../pdfjs/WicketStuffPdfJsReference.java           |   4 +-
 .../model/action/ActionUiModelFactoryFx.java       |   2 +-
 .../javafx/model/action/ActionUiModelFx.java       |  12 +-
 .../viewer/javafx/model/binding/BindingsFx.java    |  68 +++----
 .../viewer/javafx/model/context/UiContextFx.java   |  20 +-
 .../events/IsisModuleIncViewerJavaFxModel.java     |   6 +-
 .../javafx/model/events/JavaFxViewerConfig.java    |   6 +-
 .../model/events/PrimaryStageReadyEvent.java       |   2 +-
 .../viewer/javafx/model/icon/IconService.java      |   2 +-
 .../incubator/viewer/javafx/model/util/_fx.java    |  30 +--
 .../javafx/ui/IsisModuleIncViewerJavaFxUi.java     |  18 +-
 .../javafx/ui/components/UiComponentFactoryFx.java |  34 ++--
 .../javafx/ui/components/UiComponentHandlerFx.java |   8 +-
 .../ui/components/collections/TableViewFx.java     |  48 ++---
 .../javafx/ui/components/dialog/Dialogs.java       |  30 +--
 .../viewer/javafx/ui/components/form/FormPane.java |  22 +-
 .../ui/components/form/field/CustomFieldFx.java    |  18 +-
 .../ui/components/markup/MarkupFieldFactory.java   |  28 +--
 .../ui/components/number/NumberFieldFactory.java   |  12 +-
 .../javafx/ui/components/object/ObjectViewFx.java  |  82 ++++----
 .../ui/components/other/FallbackFieldFactory.java  |   4 +-
 .../javafx/ui/components/panel/TitledPanel.java    |   8 +-
 .../components/temporal/TemporalFieldFactory.java  |   6 +-
 .../ui/components/text/TextFieldFactory.java       |   8 +-
 .../disabling/DisablingDecoratorForFormField.java  |  12 +-
 .../decorator/icon/IconDecoratorForMenuItem.java   |   4 +-
 .../ui/decorator/icon/IconServiceDefault.java      |  12 +-
 .../prototyping/PrototypingDecoratorForButton.java |   8 +-
 .../PrototypingDecoratorForFormField.java          |   8 +-
 .../prototyping/PrototypingInfoPopupProvider.java  |  24 +--
 .../viewer/javafx/ui/main/MainViewFx.java          |  38 ++--
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  14 +-
 .../viewer/javafx/ui/main/UiActionHandlerFx.java   |  40 ++--
 .../viewer/javafx/ui/main/UiContextFxDefault.java  |  22 +-
 .../viewer/IsisModuleIncViewerJavaFxViewer.java    |   6 +-
 .../viewer/javafx/viewer/JavafxViewer.java         |   2 +-
 .../javafx/viewer/JavafxViewerApplication.java     |  22 +-
 .../model/action/ActionUiModelFactoryVaa.java      |   2 +-
 .../vaadin/model/action/ActionUiModelVaa.java      |  10 +-
 .../viewer/vaadin/model/context/UiContextVaa.java  |  20 +-
 .../incubator/viewer/vaadin/model/util/_vaa.java   |  12 +-
 .../vaadin/ui/IsisModuleIncViewerVaadinUi.java     |   6 +-
 .../vaadin/ui/auth/AuthSessionStoreUtil.java       |  14 +-
 .../viewer/vaadin/ui/auth/LogoutHandlerVaa.java    |  12 +-
 .../ui/auth/VaadinAuthenticationHandler.java       |  34 ++--
 .../viewer/vaadin/ui/binding/BindingsVaa.java      | 120 +++++------
 .../ui/components/UiComponentFactoryVaa.java       |  26 +--
 .../ui/components/UiComponentHandlerVaa.java       |   2 +-
 .../vaadin/ui/components/action/ActionDialog.java  |  74 +++----
 .../vaadin/ui/components/action/ActionForm.java    |  20 +-
 .../vaadin/ui/components/blob/BlobField.java       |   8 +-
 .../ui/components/blob/BlobFieldFactory.java       |   2 +-
 .../vaadin/ui/components/clob/ClobField.java       |   8 +-
 .../ui/components/clob/ClobFieldFactory.java       |   2 +-
 .../vaadin/ui/components/debug/DebugField.java     |  14 +-
 .../vaadin/ui/components/markup/MarkupField.java   |   8 +-
 .../ui/components/markup/MarkupFieldFactory.java   |   2 +-
 .../vaadin/ui/components/object/ObjectViewVaa.java |  52 ++---
 .../ui/components/other/FallbackFieldFactory.java  |  22 +-
 .../vaadin/ui/components/temporal/DateField.java   |  16 +-
 .../components/temporal/TemporalFieldFactory.java  |  32 +--
 .../ui/components/text/TextFieldFactory.java       |  10 +-
 .../ui/components/text/uuid/UuidFieldFactory.java  |  14 +-
 .../vaadin/ui/pages/login/VaadinLoginView.java     |  36 ++--
 .../viewer/vaadin/ui/pages/main/MainViewVaa.java   |  34 ++--
 .../ui/pages/main/MainView_createHeader.java       |  10 +-
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       |   8 +-
 .../viewer/vaadin/ui/pages/main/TabUtil.java       |  12 +-
 .../vaadin/ui/pages/main/UiActionHandlerVaa.java   |  20 +-
 .../vaadin/ui/pages/main/UiContextVaaDefault.java  |  20 +-
 .../viewer/vaadin/ui/util/LocalResourceUtil.java   |  12 +-
 .../viewer/IsisModuleIncViewerVaadinViewer.java    |  18 +-
 .../viewer/vaadin/viewer/IsisServletForVaadin.java |  32 +--
 .../applib/IsisModuleExtJaxRsClientApplib.java     |   1 -
 .../impl/client/JaxRsClientDefault.java            |   4 +-
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.java  |  32 +--
 .../config/DnEntityDiscoveryListener.java          |  12 +-
 .../jdo/datanucleus/config/DnSettings.java         |  30 +--
 .../jdo/datanucleus/dialect/DnJdoDialect.java      |  16 +-
 .../entities/DnEntityStateProvider.java            |  14 +-
 .../metamodel/facets/entity/JdoEntityFacet.java    |   2 +-
 .../mixins/Persistable_datanucleusVersionLong.java |   2 +-
 .../Persistable_datanucleusVersionTimestamp.java   |   2 +-
 .../jdo/datanucleus/oid/JdoObjectIdSerializer.java |  68 +++----
 .../jdo/datanucleus/oid/_JdoObjectIdDecoder.java   |  10 +-
 .../jdo/datanucleus/oid/_JdoObjectIdEncoder.java   |   8 +-
 .../integration/metamodel/JdoPropertyUtils.java    |   4 +-
 .../jdo/metamodel/IsisModuleJdoMetamodel.java      |   6 +-
 .../jdo/metamodel/JdoProgrammingModel.java         |   6 +-
 .../jdo/metamodel/beans/JdoBeanTypeClassifier.java |  28 +--
 ...JdoDatastoreIdentityAnnotationFacetFactory.java |   2 +-
 .../JdoDiscriminatorAnnotationFacetFactory.java    |   6 +-
 ...nferredFromJdoDiscriminatorValueAnnotation.java |   2 +-
 ...cIdFacetForJdoPersistenceCapableAnnotation.java |   2 +-
 ...doPersistenceCapableAnnotationFacetFactory.java |  18 +-
 .../JdoPersistenceCapableFacetAnnotation.java      |  10 +-
 .../query/JdoQueryAnnotationFacetFactory.java      |  16 +-
 .../facets/object/query/JdoQueryFacetAbstract.java |  12 +-
 .../object/query/JdoQueryFacetAnnotation.java      |   2 +-
 ...etaModelVisitingValidatorForClauseAbstract.java |  18 +-
 .../MetaModelVisitingValidatorForFromClause.java   |  16 +-
 ...taModelVisitingValidatorForVariablesClause.java |  10 +-
 .../version/JdoVersionAnnotationFacetFactory.java  |   6 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |   6 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |  12 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  10 +-
 .../JdoNotPersistentAnnotationFacetFactory.java    |   4 +-
 .../JdoNotPersistentFacetAbstract.java             |   4 +-
 .../JdoPrimaryKeyAnnotationFacetFactory.java       |   8 +-
 .../primarykey/JdoPrimaryKeyFacetAbstract.java     |   4 +-
 .../jdo/metamodel/menu/JdoMetamodelMenu.java       |  15 +-
 .../config/JdoEntityDiscoveryListener.java         |   2 +-
 .../jdo/provider/entities/JdoFacetContext.java     |   4 +-
 .../facets/object/query/JdoNamedQuery.java         |   6 +-
 .../persistence/HasPersistenceManager.java         |  16 +-
 .../jdo/spring/IsisModuleJdoSpring.java            |   2 +-
 .../exceptions/JdoResourceFailureException.java    |   2 +-
 ...sactionAwarePersistenceManagerFactoryProxy.java |   4 +-
 .../jpa/applib/services/JpaSupportService.java     |  20 +-
 .../jpa/eclipselink/IsisModuleJpaEclipselink.java  |  58 +++---
 .../jpa/eclipselink/config/ElSettings.java         |  24 +--
 .../inject/BeanManagerForEntityListeners.java      |  20 +-
 .../persistence/jpa/eclipselink/inject/_Util.java  |  18 +-
 .../jpa/integration/IsisModuleJpaIntegration.java  |   6 +-
 .../metamodel/JpaEntityFacetFactory.java           | 166 +++++++--------
 .../integration/metamodel/JpaProgrammingModel.java |   6 +-
 .../services/JpaSupportServiceUsingSpring.java     |   5 +-
 .../jpa/metamodel/IsisModuleJpaMetamodel.java      |   4 +-
 ...ndatoryFromJpaColumnAnnotationFacetFactory.java |  14 +-
 .../transients/JpaTransientAnnotationFacet.java    |   2 +-
 .../JpaTransientAnnotationFacetFactory.java        |   2 +-
 .../ObjectSpecIdFacetForTableAnnotation.java       |   2 +-
 .../table/JpaTableAnnotationFacetFactory.java      |   2 +-
 .../object/table/JpaTableFacetAnnotation.java      |   4 +-
 .../object/table/JpaTableFacetAnnotationImpl.java  |  10 +-
 .../isis/testdomain/shiro/ShiroSecmanLdapTest.java |  43 ++--
 .../DomainModelTest_usingGoodDomain.java           |  26 ++-
 .../applayer/ApplicationLayerTestFactory.java      | 226 ++++++++++-----------
 .../publishing/CommandSubscriberForTesting.java    |   4 +-
 .../EntityChangesSubscriberForTesting.java         |   4 +-
 .../EntityPropertyChangeSubscriberForTesting.java  |  24 +--
 .../testdomain/conf/Configuration_usingJdo.java    |   8 +-
 .../testdomain/conf/Configuration_usingJpa.java    |   8 +-
 .../conf/Configuration_usingSpringDataJpa.java     |   8 +-
 .../conf/Configuration_usingStereotypes.java       |   2 +-
 .../org/apache/isis/testdomain/jdo/JdoBookDto.java |  26 +--
 .../isis/testdomain/jdo/JdoInventoryDao.java       |  10 +-
 .../isis/testdomain/jdo/JdoInventoryManager.java   |   6 +-
 .../isis/testdomain/jdo/JdoInventoryResource.java  |  38 ++--
 .../isis/testdomain/jdo/JdoTestDomainModule.java   |   2 +-
 .../isis/testdomain/jdo/JdoTestDomainPersona.java  |   1 -
 .../isis/testdomain/jdo/entities/JdoBook.java      |  28 +--
 .../isis/testdomain/jdo/entities/JdoProduct.java   |  10 +-
 .../isis/testdomain/jdo/entities/package.jdo       |   2 +
 .../org/apache/isis/testdomain/jpa/JpaBookDto.java |  26 +--
 .../isis/testdomain/jpa/JpaInventoryDao.java       |  10 +-
 .../isis/testdomain/jpa/JpaInventoryManager.java   |   6 +-
 .../isis/testdomain/jpa/JpaTestDomainPersona.java  |   1 -
 .../isis/testdomain/jpa/entities/JpaBook.java      |  28 +--
 .../isis/testdomain/jpa/entities/JpaInventory.java |   6 +-
 .../isis/testdomain/jpa/entities/JpaProduct.java   |  12 +-
 .../testdomain/jpa/springdata/EmployeeManager.java |   2 +-
 .../springdata/EmployeeManager_newEmployee.java    |   8 +-
 .../jpa/springdata/SpringDataJpaTestModule.java    |   6 +-
 .../testdomain/model/actnsemantics/BlobDemo.java   |   2 +-
 .../model/actnsemantics/BlobDemoMenu.java          |   2 +-
 .../Configuration_usingActionSemantics.java        |   4 +-
 .../model/bad/AmbiguousMixinAnnotations.java       |  28 +--
 .../isis/testdomain/model/bad/AmbiguousTitle.java  |  10 +-
 .../bad/Configuration_usingInvalidDomain.java      |   4 +-
 .../model/bad/InvalidActionOverloading.java        |   4 +-
 .../model/bad/InvalidLogicalTypeNameClash.java     |  12 +-
 .../model/bad/InvalidOrphanedActionSupport.java    |   4 +-
 .../bad/InvalidOrphanedCollectionSupport.java      |   4 +-
 .../model/bad/InvalidOrphanedPropertySupport.java  |   4 +-
 .../bad/InvalidPropertyAnnotationOnAction.java     |   6 +-
 ...ration_usingInvalidDomain_noActionEnforced.java |   2 +-
 ...validOrphanedActionSupportNoActionEnforced.java |   2 +-
 .../model/good/Configuration_usingValidDomain.java |   4 +-
 .../testdomain/model/good/ElementTypeAbstract.java |   6 +-
 .../testdomain/model/good/ElementTypeConcrete.java |   2 +-
 .../model/good/ElementTypeInterface.java           |   6 +-
 .../ProperActionWithNameStartingWithSetOrGet.java  |  16 +-
 .../testdomain/model/good/ProperElementTypeVm.java |  12 +-
 ...mentTypeInterface.java => ProperInterface.java} |  37 ++--
 ...mentTypeAbstract.java => ProperInterface2.java} |  23 +--
 .../good/ProperLayoutOnPropertyWithLombok.java     |   2 +-
 .../good/ProperMemberInheritanceAbstract.java      |  24 +--
 .../good/ProperMemberInheritanceInterface.java     |  18 +-
 .../ProperMemberInheritance_usingAbstract.java     |   8 +-
 .../ProperMemberInheritance_usingInterface.java    |   8 +-
 .../testdomain/model/good/ProperMemberSupport.java |  32 +--
 .../model/good/ProperMemberSupport_action.java     |  20 +-
 .../model/good/ProperMemberSupport_action2.java    |  20 +-
 .../model/good/ProperMemberSupport_collection.java |  14 +-
 .../good/ProperMemberSupport_collection2.java      |  16 +-
 .../model/good/ProperMemberSupport_property.java   |  18 +-
 .../model/good/ProperMemberSupport_property2.java  |  18 +-
 .../model/good/ProperParameterSupport.java         |  42 ++--
 .../model/good/ProperPrefixedAction.java           |   4 +-
 .../model/good/ProperPrefixedMember.java           |  14 +-
 .../Configuration_usingInteractionDomain.java      |   2 +-
 .../model/interaction/InteractionDemo.java         |  22 +-
 .../interaction/InteractionDemo_biArgDisabled.java |   4 +-
 .../interaction/InteractionDemo_biArgEnabled.java  |   8 +-
 .../interaction/InteractionDemo_multiEnum.java     |  20 +-
 .../interaction/InteractionDemo_multiInt.java      |  26 +--
 .../interaction/InteractionDemo_negotiate.java     |  38 ++--
 .../interaction/InteractionDemo_noArgDisabled.java |   8 +-
 .../interaction/InteractionDemo_noArgEnabled.java  |   4 +-
 .../model/interaction/InteractionNpmDemo.java      |   4 +-
 .../InteractionNpmDemo_biArgDisabled.java          |  38 ++--
 .../InteractionNpmDemo_biArgEnabled.java           |  26 +--
 .../testdomain/model/interaction/Parameters.java   |   8 +-
 .../model/layout/Configuration_usingLayout.java    |   2 +-
 .../isis/testdomain/model/layout/LayoutDemo.java   |   2 +-
 .../model/stereotypes/MyObject_mixin.java          |   4 +-
 .../apache/isis/testdomain/rospec/BigComplex.java  |   1 -
 .../apache/isis/testdomain/rospec/Customer.java    |   2 +-
 .../isis/testdomain/util/CollectionAssertions.java |  52 ++---
 .../apache/isis/testdomain/util/UtilSurefire.java  |   2 +-
 .../util/interaction/InteractionBoundaryProbe.java |  30 +--
 .../util/interaction/InteractionTestAbstract.java  |  76 +++----
 .../isis/testdomain/util/kv/KVStoreForTesting.java |  26 +--
 .../testdomain/util/rest/RestEndpointService.java  |  48 ++---
 .../PermissionToRoleMapperFromIni.java             |   2 +-
 .../spring/webmodule/SpringSecurityFilter.java     |   1 -
 .../subdomains/base/applib/utils/TitleBuilder.java |   1 +
 .../subdomains/base/applib/with/WithInterval.java  |   2 +
 .../applib/IsisModuleSubdomainsDocxApplib.java     |   1 -
 .../applib/IsisModuleSubdomainsExcelApplib.java    |   3 +
 .../excel/applib/dom/util/CellMarshaller.java      | 128 ++++++------
 .../excel/applib/dom/util/ExcelConverter.java      |  24 +--
 .../contributions/ExcelDemoToDoItem_export.java    |   2 +-
 .../contributions/ExcelDemoToDoItem_export2.java   |   2 +-
 .../BulkUpdateLineItemForDemoToDoItem.java         |   4 +-
 .../BulkUpdateManagerForDemoToDoItem.java          |   6 +-
 .../bulkupdate/BulkUpdateMenuForDemoToDoItem.java  |   2 +-
 .../demotodoitem/DemoToDoItemRowHandler2.java      |   2 +-
 .../DemoToDoItem_create_usingExcelFixture.java     |   2 +-
 .../todomodule/dom/DependenciesComparator.java     |   6 +-
 .../demoapp/todomodule/dom/ExcelDemoToDoItem.java  |  26 +--
 .../todomodule/dom/ExcelDemoToDoItemMenu.java      |  24 +--
 .../ExcelDemoToDoItem_recreate5_for.java           |  12 +-
 .../subdomains/excel/testing/ExcelFixture.java     |   9 +-
 .../subdomains/excel/testing/ExcelFixture2.java    |   6 +-
 .../isis/extensions/zip/dom/impl/ZipService.java   |   6 +-
 .../demomodule/dom/FakeDataDemoObjectWithAll.java  |   6 +-
 ...eDataDemoObjectWithAll_update_withFakeData.java |   2 +-
 .../IsisIntegrationTestAbstractWithFixtures.java   |   2 +-
 .../applib/IsisModuleTestingFixturesApplib.java    |   1 +
 .../api/FixtureScriptWithExecutionStrategy.java    |   2 +-
 .../isis/testing/fixtures/applib/clock/Clock.java  |   6 +-
 .../fixturescripts/BuilderScriptAbstract.java      |  16 +-
 .../fixturescripts/BuilderScriptWithResult.java    |   6 +-
 .../fixturescripts/BuilderScriptWithoutResult.java |   4 +-
 .../applib/fixturescripts/FixtureResult.java       |   7 +-
 .../applib/fixturescripts/FixtureResultList.java   |   4 +-
 .../applib/fixturescripts/FixtureScripts.java      |  29 +--
 .../applib/modules/ModuleWithFixturesService.java  |   2 +-
 .../applib/services/FixturesLifecycleService.java  |   4 +-
 .../h2console/ui/IsisModuleTestingH2ConsoleUi.java |   1 +
 .../h2console/ui/services/H2ManagerMenu.java       |   5 +-
 .../hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java      |   1 +
 .../hsqldbmgr/dom/services/HsqlDbManagerMenu.java  |   5 +-
 .../applib/ExceptionRecognizerTranslate.java       |   6 +-
 .../applib/IsisIntegrationTestAbstract.java        |   4 +-
 .../integtestsupport/applib/ThrowableMatchers.java |   6 +-
 .../testing/integtestsupport/applib/_Helper.java   |   6 +-
 .../applib/validate/DomainModelValidator.java      |   2 +-
 .../unittestsupport/applib/bean/PojoTester.java    |  63 ++++--
 .../applib/core/jmocking/MyMockomatic.java         |   2 +-
 .../applib/core/jmocking/PostponedAction.java      |   2 +
 .../main/java/org/apache/isis/tooling/c4/C4.java   |  14 +-
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  |   2 -
 .../j2adoc/convert/J2AdocConverterDefault.java     |   1 +
 .../isis/tooling/j2adoc/format/UnitFormatter.java  |   2 -
 .../j2adoc/format/UnitFormatterAbstract.java       |   5 -
 .../format/UnitFormatterWithSourceAndCallouts.java |   1 +
 .../format/UnitFormatterWithSourceAndSections.java |   3 +-
 .../j2adoc/util/AsciiDocIncludeTagFilter.java      |  12 +-
 .../tooling/javamodel/AnalyzerConfigFactory.java   |  26 +--
 .../javamodel/ast/AnnotationDeclarations.java      |   1 -
 .../ast/AnnotationMemberDeclarations.java          |   8 +-
 .../tooling/javamodel/ast/AnyTypeDeclaration.java  |  24 +--
 .../javamodel/ast/CallableDeclarations.java        |   8 -
 .../ast/ClassOrInterfaceDeclarations.java          |  24 +--
 .../isis/tooling/javamodel/ast/CodeClasses.java    |  24 +--
 .../tooling/javamodel/ast/CompilationUnits.java    |  32 +--
 .../javamodel/ast/ConstructorDeclarations.java     |   3 -
 .../javamodel/ast/EnumConstantDeclarations.java    |   4 +-
 .../tooling/javamodel/ast/EnumDeclarations.java    |  28 +--
 .../tooling/javamodel/ast/FieldDeclarations.java   |   2 -
 .../tooling/javamodel/ast/ImportDeclarations.java  |  28 +--
 .../isis/tooling/javamodel/ast/MemberInfos.java    |  12 +-
 .../tooling/javamodel/ast/MethodDeclarations.java  |   1 -
 .../tooling/javamodel/ast/PackageDeclarations.java |   2 +-
 .../tooling/javamodel/ast/TypeDeclarations.java    |  18 +-
 .../isis/tooling/model4adoc/AsciiDocFactory.java   |  68 +++----
 .../isis/tooling/model4adoc/BlockVisitor.java      |   4 +-
 .../apache/isis/tooling/model4adoc/NodeWriter.java |  14 +-
 .../model4adoc/StructuralNodeTraversor.java        |  22 +-
 .../tooling/model4adoc/StructuralNodeVisitor.java  |  22 +-
 .../model4adoc/ast/ContentNodeAbstract.java        |  10 +-
 .../isis/tooling/model4adoc/ast/SimpleBlock.java   |   8 +-
 .../isis/tooling/model4adoc/ast/SimpleCell.java    |   4 +-
 .../isis/tooling/model4adoc/ast/SimpleColumn.java  |   2 +-
 .../tooling/model4adoc/ast/SimpleDocument.java     |   2 +-
 .../isis/tooling/model4adoc/ast/SimpleList.java    |   4 +-
 .../tooling/model4adoc/ast/SimpleListItem.java     |   2 +-
 .../model4adoc/ast/SimpleStructuralNode.java       |  10 +-
 .../isis/tooling/model4adoc/ast/SimpleTable.java   |   4 +-
 .../model4adoc/include/IncludeStatement.java       |  16 +-
 .../model4adoc/include/IncludeStatements.java      |  70 +++----
 .../tooling/projectmodel/ArtifactCoordinates.java  |  20 +-
 .../projectmodel/ArtifactShortNameFactory.java     |   2 +-
 .../isis/tooling/projectmodel/Dependency.java      |  18 +-
 .../isis/tooling/projectmodel/ProjectNode.java     |  24 +--
 .../projectmodel/ProjectNodeFactory_gradle.java    |  12 +-
 .../isis/tooling/projectmodel/ProjectVisitor.java  |   4 +-
 .../projectmodel/gradle/GradleBuildArtifact.java   |   6 +-
 .../projectmodel/gradle/GradleDependencies.java    |   2 +-
 .../gradle/GradleDependenciesFactory.java          |  18 +-
 .../gradle/GradleDependenciesWriter.java           |  26 +--
 .../projectmodel/gradle/GradleSettings.java        |   2 +-
 .../projectmodel/gradle/GradleSettingsFactory.java |  20 +-
 .../projectmodel/gradle/GradleSettingsWriter.java  |  26 +--
 .../projectmodel/gradle/WriterAbstract.java        |   6 +-
 .../projectmodel/maven/MavenModelFactory.java      |  28 +--
 .../projectmodel/maven/SimpleModelResolver.java    |  74 +++----
 .../projectmodel/sync/GradleDeficiency.java        |   2 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |   1 +
 .../asciidoc/applib/value/Converter.java           |  10 +-
 .../metamodel/facets/AsciiDocValueFacet.java       |   2 +-
 .../facets/AsciiDocValueSemanticsProvider.java     |   6 +-
 .../ui/vaa/components/AsciiDocFieldFactoryVaa.java |  12 +-
 .../ui/vaa/components/AsciiDocFieldVaa.java        |  10 +-
 .../asciidoc/ui/vaa/components/PrismResources.java |  10 +-
 .../ui/wkt/components/AsciiDocComponentWkt.java    |   4 +-
 .../wkt/components/AsciiDocPanelFactoriesWkt.java  |   6 +-
 .../ui/wkt/components/prism/PrismResources.java    |   4 +-
 .../valuetypes/markdown/applib/value/Markdown.java |   1 +
 .../metamodel/facets/MarkdownValueFacet.java       |   2 +-
 .../facets/MarkdownValueSemanticsProvider.java     |   4 +-
 .../ui/wkt/components/MarkdownComponent.java       |   2 +-
 .../MarkdownPanelFactoriesForWicket.java           |   8 +-
 .../sse/metamodel/facets/SseObserveFacet.java      |   2 +-
 ...eObserveFacetForServerSentEventsAnnotation.java |   4 +-
 .../ui/wkt/markup/ListeningMarkupComponent.java    |  12 +-
 .../markup/ListeningMarkupComponent_observing.java |   2 +-
 .../ListeningMarkupPanelFactoriesForWicket.java    |  12 +-
 .../ui/wkt/webmodule/ServerSentEventsServlet.java  |  20 +-
 .../common/applib/mixins/Object_impersonate.java   |   4 +-
 .../applib/mixins/Object_impersonateWithRoles.java |   1 -
 .../applib/mixins/Object_stopImpersonating.java    |   3 -
 .../isis/viewer/common/model/HasParentUiModel.java |   2 +-
 .../apache/isis/viewer/common/model/HasTitle.java  |   2 +-
 .../isis/viewer/common/model/HasUiComponent.java   |   2 +-
 .../isis/viewer/common/model/HasUiMenuItem.java    |   2 +-
 .../viewer/common/model/UiComponentHolder.java     |   6 +-
 .../viewer/common/model/action/ActionUiModel.java  |   6 +-
 .../model/action/decorator/ActionUiDecorator.java  |   4 +-
 .../model/action/form/FormPendingParamUiModel.java |  10 +-
 .../common/model/binding/BindingConverter.java     |  20 +-
 .../binding/NumberConverterForStringComponent.java |  12 +-
 .../TemporalConverterForLocalDateComponent.java    |   4 +-
 .../common/model/branding/BrandingUiModel.java     |   8 +-
 .../model/branding/BrandingUiModelProvider.java    |  10 +-
 .../model/components/UiComponentFactory.java       |  56 ++---
 .../viewer/common/model/debug/DebugUiModel.java    |   4 +-
 .../model/decorator/confirm/ConfirmDecorator.java  |   2 +-
 .../model/decorator/confirm/ConfirmUiModel.java    |  24 +--
 .../model/decorator/danger/DangerDecorator.java    |   2 +-
 .../decorator/disable/DisablingDecorator.java      |   2 +-
 .../model/decorator/disable/DisablingUiModel.java  |   4 +-
 .../model/decorator/icon/FontAwesomeUiModel.java   |   8 +-
 .../common/model/decorator/icon/IconDecorator.java |   6 +-
 .../prototyping/PrototypingDecorator.java          |   4 +-
 .../decorator/prototyping/PrototypingUiModel.java  |  24 +--
 .../model/decorator/tooltip/TooltipDecorator.java  |   8 +-
 .../model/decorator/tooltip/TooltipUiModel.java    |   6 +-
 .../common/model/feature/ParameterUiModel.java     |  22 +-
 .../common/model/feature/PropertyUiModel.java      |  12 +-
 .../viewer/common/model/feature/ScalarUiModel.java |  14 +-
 .../common/model/gridlayout/UiGridLayout.java      |  66 +++---
 .../isis/viewer/common/model/menu/MenuItemDto.java |  12 +-
 .../isis/viewer/common/model/menu/MenuUiModel.java |  14 +-
 .../common/model/menu/MenuUiModelProvider.java     |  14 +-
 .../isis/viewer/common/model/menu/MenuVisitor.java |   4 +-
 .../viewer/common/model/object/ObjectUiModel.java  |  14 +-
 .../applib/dtos/ScalarValueDtoV1.java              |   6 +-
 .../IsisModuleRestfulObjectsRendering.java         |   2 +
 .../restfulobjects/rendering/RendererFactory.java  |   4 +-
 .../rendering/ReprRendererAbstract.java            |   8 +-
 .../viewer/restfulobjects/rendering/Responses.java |  10 +-
 .../AbstractObjectMemberReprRenderer.java          |   4 +-
 .../domainobjects/ActionResultReprRenderer.java    |  12 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |  38 ++--
 .../domainobjects/JsonValueEncoder_Converters.java |  10 +-
 .../rendering/domainobjects/ListReprRenderer.java  |  10 +-
 .../domainobjects/ObjectActionReprRenderer.java    |   8 +-
 .../domainobjects/ObjectAndActionInvocation.java   |  30 +--
 .../ObjectCollectionReprRenderer.java              |  10 +-
 .../domainobjects/ObjectPropertyReprRenderer.java  |   6 +-
 .../domaintypes/TypeListReprRenderer.java          |   2 +-
 .../service/swagger/SwaggerServiceMenu.java        |   7 +-
 .../service/swagger/internal/TaggerDefault.java    |  14 +-
 .../internal/ValuePropertyFactoryDefault.java      |   4 +-
 .../swagger/internal/ValuePropertyPlugin.java      |  12 +-
 .../rendering/util/JsonWriterUtil.java             |   6 +-
 .../service/swagger/internal/TaggerTest.java       |   4 +-
 ..._ensureCompatibleAcceptHeader_ContractTest.java |  24 +--
 .../viewer/context/ResourceContext.java            |  12 +-
 .../restfulobjects/viewer/mappers/FailureUtil.java |   2 +-
 .../viewer/mappers/entity/ExceptionDetail.java     |   4 +-
 .../viewer/mappers/entity/ExceptionPojo.java       |   2 +-
 .../resources/DomainObjectResourceServerside.java  |   6 +-
 .../viewer/resources/DomainResourceHelper.java     |  74 +++----
 .../resources/DomainServiceResourceServerside.java |  12 +-
 .../viewer/resources/HomePageReprRenderer.java     |  64 +++---
 .../resources/HomePageResourceServerside.java      |   2 +-
 .../resources/InteractionFailureHandler.java       |   8 +-
 .../viewer/resources/JsonParserHelper.java         |   2 +-
 .../resources/MenuBarsResourceServerside.java      |   6 +-
 .../viewer/resources/ObjectActionArgHelper.java    |  14 +-
 .../resources/ObjectAdapterAccessHelper.java       |  16 +-
 .../resources/ObjectAdapterUpdateHelper.java       |   6 +-
 .../viewer/resources/ResourceAbstract.java         |  42 ++--
 .../viewer/resources/ResourceDescriptor.java       |   6 +-
 .../viewer/resources/UserResourceServerside.java   |   4 +-
 .../resources/VersionResourceServerside.java       |   2 +-
 .../serialization/SerializationStrategy.java       |  14 +-
 .../IsisRestfulObjectsInteractionFilter.java       |  36 ++--
 .../auth/AuthenticationStrategyAbstract.java       |   1 -
 .../wicket/model/common/CommonContextUtils.java    |   4 +-
 .../wicket/model/common/PageParametersUtils.java   |   4 +-
 .../wicket/model/hints/IsisSelectorEvent.java      |   6 +-
 .../links/ActionLinkUiComponentFactoryWkt.java     |   2 +-
 .../wicket/model/links/LinkAndLabelAbstract.java   |  40 ++--
 .../wicket/model/mementos/PageParameterNames.java  |   2 +-
 .../wicket/model/models/ActionPromptProvider.java  |   2 +-
 .../wicket/model/models/BookmarkTreeNode.java      |  16 +-
 .../wicket/model/models/BookmarkableModel.java     |   2 +-
 .../wicket/model/models/BookmarkedPagesModel.java  |   2 +-
 .../wicket/model/models/FormExecutorContext.java   |   4 +-
 .../model/models/HintPageParameterSerializer.java  |   8 +-
 .../wicket/model/models/ManagedObjectModel.java    |  40 ++--
 .../viewer/wicket/model/models/ModelAbstract.java  |   8 +-
 .../viewer/wicket/model/models/PendingModel.java   |  14 +-
 .../RedirectRequestHandlerWithOpenUrlStrategy.java |   8 +-
 .../model/models/ScalarModelWithMultiPending.java  |   4 +-
 .../model/models/ScalarModelWithPending.java       |   4 +-
 .../wicket/model/models/ServiceActionsModel.java   |   6 +-
 .../model/models/ToggledMementosProvider.java      |   2 +-
 .../viewer/wicket/model/util/ComponentHintKey.java |  22 +-
 .../isis/viewer/wicket/ui/ComponentFactory.java    |   6 +-
 .../viewer/wicket/ui/ComponentFactoryAbstract.java |   8 +-
 .../ui/actionresponse/ActionResultResponse.java    |  24 +--
 .../ActionResultResponseHandlingStrategy.java      |  34 ++--
 .../wicket/ui/app/logout/LogoutHandlerWkt.java     |   6 +-
 .../ui/app/registry/ComponentFactoryRegistrar.java |   2 +-
 .../viewer/wicket/ui/components/LabelBase.java     |   8 +-
 .../wicket/ui/components/WebComponentBase.java     |  12 +-
 .../wicket/ui/components/about/AboutPanel.java     |   2 +-
 .../ui/components/about/JarManifestModel.java      |  16 +-
 .../ui/components/actioninfo/ActionInfoPanel.java  |   2 +-
 .../ui/components/actionlink/ActionLinkPanel.java  |   2 +-
 .../components/actionmenu/CssClassFaBehavior.java  |   2 +-
 .../actionmenu/serviceactions/CssMenuItem.java     |  40 ++--
 .../serviceactions/CssMenuItemPanelAbstract.java   |   2 +-
 .../serviceactions/CssSubMenuItemsPanel.java       |   2 +-
 .../actionmenu/serviceactions/MenuActionPanel.java |   8 +-
 .../serviceactions/ServiceActionsPanel.java        |  16 +-
 .../serviceactions/ServiceActionsPanelFactory.java |   4 +-
 .../serviceactions/TertiaryActionsPanel.java       |   4 +-
 .../serviceactions/TertiaryMenuPanelFactory.java   |   6 +-
 .../actionprompt/ActionPromptHeaderPanel.java      |   2 +-
 .../actions/ActionFormExecutorStrategy.java        |   4 +-
 .../components/actions/ActionParametersForm.java   |  38 ++--
 .../actions/ActionParametersFormPanel.java         |   2 +-
 .../components/actions/ActionParametersPanel.java  |   4 +-
 .../bookmarkedpages/BookmarkedPagesPanel.java      |   6 +-
 .../CollectionContentsSortableDataProvider.java    |   8 +-
 .../ajaxtable/IsisAjaxFallbackDataTable.java       |   4 +-
 .../ajaxtable/IsisAjaxNavigationToolbar.java       |   6 +-
 .../ajaxtable/IsisAjaxPagingNavigationLink.java    |   6 +-
 .../ajaxtable/IsisTotalRecordsToolbar.java         |   8 +-
 .../ajaxtable/PrototypingMessageProvider.java      |  12 +-
 .../ajaxtable/columns/ColumnAbstract.java          |  10 +-
 .../columns/ObjectAdapterToggleboxColumn.java      |  16 +-
 .../icons/CollectionContentsAsIconsPanel.java      |   4 +-
 .../unresolved/CollectionContentsHiddenPanel.java  |   2 +-
 .../ui/components/empty/EmptyCollectionPanel.java  |   2 +-
 .../entity/EntityComponentFactoryAbstract.java     |   8 +-
 .../icontitle/EntityIconAndTitlePanelFactory.java  |  46 ++---
 .../wicket/ui/components/footer/FooterPanel.java   |  34 ++--
 .../ui/components/layout/bs3/BS3GridPanel.java     |   2 +-
 .../components/layout/bs3/clearfix/ClearFix.java   |   2 +-
 ...RepeatingViewWithDynamicallyVisibleContent.java |   4 +-
 .../wicket/ui/components/layout/bs3/row/Row.java   |   4 +-
 .../components/layout/bs3/tabs/TabGroupPanel.java  |   6 +-
 .../ui/components/layout/bs3/tabs/TabPanel.java    |   2 +-
 .../ui/components/property/PropertyEditPanel.java  |   8 +-
 .../PropertyEditPromptHeaderPanel.java             |   4 +-
 .../scalars/ComponentFactoryScalarAbstract.java    |   2 +-
 .../ui/components/scalars/DateConverterPlugin.java |   6 +-
 .../scalars/ScalarPanelSelectAbstract.java         |   6 +-
 .../scalars/ScalarPanelTextFieldAbstract.java      |  28 +--
 .../ScalarPanelTextFieldDatePickerAbstract.java    |   2 +-
 .../ui/components/scalars/TextFieldValueModel.java |   4 +-
 .../blobclob/IsisBlobOrClobPanelAbstract.java      |  18 +-
 .../scalars/blobclob/ResourceLinkVolatile.java     |   8 +-
 .../scalars/datepicker/DateTimeConfig.java         |  18 +-
 .../datepicker/TextFieldWithDateTimePicker.java    |  18 +-
 .../scalars/image/JavaAwtImagePanel.java           |  10 +-
 .../components/scalars/image/WicketImageUtil.java  |  26 +--
 .../jdkdates/DateConverterForJavaAbstract.java     |   6 +-
 .../jodatime/ConverterForJodaLocalTime.java        |   8 +-
 .../scalars/jodatime/JodaLocalTimePanel.java       |  10 +-
 .../jodatime/JodaLocalTimePanelFactory.java        |   6 +-
 .../scalars/markup/MarkupComponent_reloadJs.java   |   2 +-
 .../scalars/markup/MarkupPanelFactories.java       |  12 +-
 .../scalars/markup/ParentedMarkupPanel.java        |   8 +-
 .../scalars/markup/StandaloneMarkupPanel.java      |   6 +-
 .../components/scalars/primitive/BooleanPanel.java |   2 +-
 .../scalars/reference/EntityLinkSelect2Panel.java  |   4 +-
 .../valuechoices/ValueChoicesSelect2Panel.java     |   6 +-
 .../components/tree/IsisToWicketTreeAdapter.java   |  30 +--
 .../ui/components/tree/StandaloneTreePanel.java    |   4 +-
 .../wicket/ui/components/tree/TreePanel.java       |   8 +-
 .../components/tree/themes/TreeThemeProvider.java  |   6 +-
 .../themes/bootstrap/IsisBootstrapTreeTheme.java   |   2 +-
 .../ui/components/unknown/UnknownModelPanel.java   |   6 +-
 .../ui/components/voidreturn/VoidReturnPanel.java  |   2 +-
 .../wicket/ui/components/welcome/WelcomePanel.java |   2 +-
 .../ui/components/welcome/WelcomePanelFactory.java |   8 +-
 .../ui/components/widgets/bootstrap/FormGroup.java |   2 +-
 .../components/widgets/bootstrap/ModalDialog.java  |   2 +-
 .../widgets/breadcrumbs/BreadcrumbModel.java       |   4 +-
 .../widgets/buttons/ContainedButtonPanel.java      |   2 +-
 .../widgets/buttons/ToggleButtonsPanel.java        |   2 +-
 .../widgets/checkbox/ContainedToggleboxPanel.java  |  10 +-
 .../entitysimplelink/EntityLinkSimplePanel.java    |   4 +-
 .../widgets/linkandlabel/ActionLink.java           |   6 +-
 .../ui/components/widgets/navbar/AvatarImage.java  |   4 -
 .../ui/components/widgets/navbar/BrandName.java    |   2 +-
 .../ui/components/widgets/select2/ChoiceExt.java   |   4 +-
 .../select2/Select2BootstrapCssReference.java      |   2 -
 .../widgets/select2/Select2ChoiceExt.java          |   6 +-
 .../widgets/select2/Select2JsReference.java        |   4 +-
 .../widgets/select2/Select2MultiChoiceExt.java     |  22 +-
 ...tAdapterMementoProviderForReferenceChoices.java |   6 +-
 ...entoProviderForReferenceObjectAutoComplete.java |   2 +-
 ...derForReferenceParamOrPropertyAutoComplete.java |  26 +--
 ...bjectAdapterMementoProviderForValueChoices.java |   8 +-
 .../themepicker/IsisWicketThemeSupportDefault.java |  20 +-
 .../widgets/themepicker/ThemeChooser.java          |   4 +-
 .../themepicker/ThemeProviderComposite.java        |  30 +--
 .../zclip/SimpleClipboardModalWindowPanel.java     |   2 +-
 .../viewer/wicket/ui/errors/JGrowlBehaviour.java   |  10 +-
 .../isis/viewer/wicket/ui/errors/JGrowlUtil.java   |  18 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  26 +--
 .../isis/viewer/wicket/ui/pages/WebPageBase.java   |  29 +--
 .../accmngt/AccountManagementPageAbstract.java     |   8 +-
 .../ui/pages/accmngt/EmailAvailableValidator.java  |  14 +-
 .../pages/accmngt/UsernameAvailableValidator.java  |  10 +-
 .../password_reset/PasswordResetEmailPanel.java    |   4 +-
 .../accmngt/password_reset/PasswordResetPanel.java |   4 +-
 .../ui/pages/accmngt/register/RegisterPanel.java   |  18 +-
 .../accmngt/signup/RegistrationFormPanel.java      |   3 +-
 .../ui/pages/actionprompt/ActionPromptPage.java    |   8 +-
 .../viewer/wicket/ui/pages/error/ErrorPage.java    |   2 +-
 .../wicket/ui/pages/login/IsisSignInPanel.java     |   4 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |   2 +-
 .../isis/viewer/wicket/ui/panels/FormAbstract.java |   8 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  12 +-
 .../viewer/wicket/ui/panels/PanelAbstract.java     |   8 +-
 .../isis/viewer/wicket/ui/panels/PanelBase.java    |  40 ++--
 .../wicket/ui/panels/PromptFormAbstract.java       |  10 +-
 .../wicket/ui/panels/PromptFormPanelAbstract.java  |   2 +-
 .../isis/viewer/wicket/ui/util/Components.java     |  12 +-
 .../isis/viewer/wicket/ui/util/Decorators.java     |  88 ++++----
 .../wicket/ui/util/ExtendedPopoverConfig.java      |  12 +-
 .../wicket/ui/util/FontAwesomeCssReferenceWkt.java |   2 +-
 .../isis/viewer/wicket/ui/util/SSESupport.java     |  10 +-
 .../isis/viewer/wicket/ui/util/Tooltips.java       |  24 +--
 .../viewer/wicket/ui/validation/ValidatorBase.java |   6 +-
 .../viewer/IsisModuleViewerWicketViewer.java       |   2 -
 .../AuthenticatedWebSessionForIsis.java            |   2 +-
 .../integration/ConverterForObjectAdapter.java     |  10 +-
 .../ConverterForObjectAdapterMemento.java          |   2 +-
 .../viewer/integration/LocalizerForIsis.java       |   6 +-
 .../viewer/integration/WebRequestCycleForIsis.java |  60 +++---
 .../ComponentFactoryRegistrarDefault.java          |   8 +-
 .../ComponentFactoryRegistryDefault.java           |  12 +-
 .../registries/pages/PageClassRegistryDefault.java |   2 +-
 .../services/ImageResourceCacheClassPath.java      |   2 +-
 .../services/TranslationsResolverWicket.java       |  14 +-
 .../services/WicketViewerSettingsDefault.java      |   2 +-
 .../mementos/ObjectMementoServiceWicket.java       |  24 +--
 .../viewer/services/mementos/ObjectMementoWkt.java |  10 +-
 .../viewer/wicketapp/IsisWicketApplication.java    |  47 ++---
 .../IsisWicketApplication_experimental.java        |  20 +-
 .../IsisWicketApplication_newPageFactory.java      |  34 ++--
 .../IsisWicketApplication_newSession.java          |   8 +-
 ...rgetRespondListenerToResetQueryResultCache.java |   4 +-
 1447 files changed, 10494 insertions(+), 10177 deletions(-)
 rename viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/ImpersonatedUserHolderWicket.java => core/webapp/src/main/java/org/apache/isis/core/webapp/impersonation/ImpersonatedUserHolderUsingHttpSession.java (56%)
 copy extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/{ApplicationTypeProperty.layout.fallback.xml => ApplicationTypeMember.layout.fallback.xml} (100%)
 delete mode 100644 extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtFixturesFixtureResultsRoleAndPermissions.java => other/IsisApplibConfigurationRoleAndPermissions.java} (64%)
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtFixturesFixtureResultsRoleAndPermissions.java => other/IsisApplibMetaModelRoleAndPermissions.java} (69%)
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtFixturesFixtureResultsRoleAndPermissions.java => other/IsisApplibTranslationRoleAndPermissions.java} (73%)
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtSecmanFixtureRoleAndPermissions.java => other/IsisExtFixturesRoleAndPermissions.java} (64%)
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtSecmanFixtureRoleAndPermissions.java => other/IsisExtH2ConsoleRoleAndPermissions.java} (68%)
 copy extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtFixturesFixtureResultsRoleAndPermissions.java => other/IsisPersistenceJdoMetaModelRoleAndPermissions.java} (71%)
 rename extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtSecmanFixtureRoleAndPermissions.java => other/IsisSudoImpersonateRoleAndPermissions.java} (69%)
 rename extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{IsisExtFixturesFixtureResultsRoleAndPermissions.java => other/IsisViewerRestfulObjectsSwaggerRoleAndPermissions.java} (68%)
 rename extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{ => secman}/GlobalTenancy.java (95%)
 rename extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{ => secman}/IsisExtSecmanAdminRoleAndPermissions.java (73%)
 rename extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/{ => secman}/IsisExtSecmanAdminUser.java (93%)
 create mode 100644 extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanRegularUserRoleAndPermissions.java
 copy regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/entities/package.jdo => extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/package.jdo~breaks-mvn-build (65%)
 copy regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/{ElementTypeInterface.java => ProperInterface.java} (63%)
 copy regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/{ElementTypeAbstract.java => ProperInterface2.java} (75%)

[isis] 03/03: ISIS-2619: adds additional roles for isis core and extension

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

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

commit b63ac5c6b2edd4f545e888f2a1e9eba8219bbb0a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 13 23:25:35 2021 +0100

    ISIS-2619: adds additional roles for isis core and extension
    
    Also:
    - introduces NAMESPACE and OBJECT_TYPE constants as required
    - uses FQCN for secman entity 'FROM' clauses
    - removes fixtureRoleName from secman config bean (no point discerned)
    - adds comments for usage of Secman config bean
---
 .../org/apache/isis/applib/IsisModuleApplib.java   |   4 +
 .../isis/applib/domain/DomainObjectList.java       |  16 ++-
 .../services/confview/ConfigurationMenu.java       |   6 +-
 .../services/confview/ConfigurationProperty.java   |   5 +-
 .../services/confview/ConfigurationViewmodel.java  |  15 +-
 .../applib/services/layout/LayoutServiceMenu.java  |   8 +-
 .../services/metamodel/MetaModelServiceMenu.java   |   6 +-
 .../isis/applib/services/user/ImpersonateMenu.java |   7 +-
 .../isis/applib/services/user/RoleMemento.java     |   4 +-
 .../isis/applib/services/user/UserMemento.java     |   4 +-
 .../core/metamodel/inspect/model/ActionNode.java   |   8 +-
 .../metamodel/inspect/model/CollectionNode.java    |   8 +-
 .../metamodel/inspect/model/FacetAttrNode.java     |   8 +-
 .../metamodel/inspect/model/FacetGroupNode.java    |   8 +-
 .../core/metamodel/inspect/model/FacetNode.java    |   8 +-
 .../metamodel/inspect/model/ParameterNode.java     |   8 +-
 .../core/metamodel/inspect/model/PropertyNode.java |   8 +-
 .../core/metamodel/inspect/model/TypeNode.java     |   8 +-
 .../i18n/po/TranslationServicePoMenu.java          |   6 +-
 .../isis/core/security/IsisModuleCoreSecurity.java |   2 +
 .../security/authentication/logout/LogoutMenu.java |   3 +-
 .../commandlog/jdo/IsisModuleExtCommandLogJdo.java |   2 +
 .../commandlog/jdo/entities/CommandJdo.java        |   5 +-
 .../commandlog/jdo/ui/CommandServiceMenu.java      |   6 +-
 .../commandlog/jpa/IsisModuleExtCommandLogJpa.java |   2 +
 .../commandlog/jpa/entities/CommandJpa.java        |   4 +-
 .../primary/IsisModuleExtCommandReplayPrimary.java |   2 +
 .../primary/restapi/CommandRetrievalService.java   |   6 +-
 .../primary/ui/CommandReplayOnPrimaryService.java  |   4 +-
 .../IsisModuleExtCommandReplaySecondary.java       |   2 +
 .../ui/CommandReplayOnSecondaryService.java        |   4 +-
 .../secman/api/IsisModuleExtSecmanApi.java         |   2 +
 .../extensions/secman/api/SecmanConfiguration.java | 150 +++++++++++++++++---
 .../api/feature/dom/ApplicationFeatureChoices.java |   6 +-
 .../feature/dom/ApplicationFeatureViewModel.java   |   6 +-
 .../feature/dom/ApplicationFeatureViewModels.java  |   8 +-
 .../api/feature/dom/ApplicationNamespace.java      |   7 +-
 .../secman/api/feature/dom/ApplicationType.java    |  13 +-
 .../api/feature/dom/ApplicationTypeAction.java     |  11 +-
 .../api/feature/dom/ApplicationTypeCollection.java |  11 +-
 .../api/feature/dom/ApplicationTypeMember.java     |   9 +-
 .../dom/ApplicationTypeMember.layout.fallback.xml  | 131 +++++++++++++++++
 .../api/feature/dom/ApplicationTypeProperty.java   |   7 +-
 .../app/ApplicationOrphanedPermissionManager.java  |   6 +-
 .../api/permission/dom/ApplicationPermission.java  |   6 +-
 .../permission/menu/ApplicationPermissionMenu.java |  12 +-
 .../secman/api/role/dom/ApplicationRole.java       |   6 +-
 .../secman/api/role/menu/ApplicationRoleMenu.java  |   8 +-
 .../secman/api/tenancy/dom/ApplicationTenancy.java |   6 +-
 .../api/tenancy/menu/ApplicationTenancyMenu.java   |   8 +-
 .../api/user/app/ApplicationUserManager.java       |  13 +-
 .../secman/api/user/dom/ApplicationUser.java       |   6 +-
 .../dom/mixins/perms/UserPermissionViewModel.java  |  52 +++----
 .../secman/api/user/menu/ApplicationUserMenu.java  | 157 +++------------------
 .../extensions/secman/api/user/menu/MeService.java |   8 +-
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |  89 ------------
 .../scripts/SeedUsersAndRolesFixtureScript.java    |  28 ++--
 ...IsisApplibConfigurationRoleAndPermissions.java} |  21 ++-
 .../IsisApplibMetaModelRoleAndPermissions.java}    |  20 +--
 .../IsisApplibTranslationRoleAndPermissions.java}  |  19 +--
 .../IsisExtFixturesRoleAndPermissions.java}        |  17 ++-
 .../IsisExtH2ConsoleRoleAndPermissions.java}       |  18 ++-
 ...PersistenceJdoMetaModelRoleAndPermissions.java} |  21 +--
 .../IsisSudoImpersonateRoleAndPermissions.java}    |  22 +--
 ...erRestfulObjectsSwaggerRoleAndPermissions.java} |  22 +--
 .../seed/scripts/{ => secman}/GlobalTenancy.java   |   2 +-
 .../IsisExtSecmanAdminRoleAndPermissions.java      |  20 ++-
 .../{ => secman}/IsisExtSecmanAdminUser.java       |   3 +-
 ...IsisExtSecmanRegularUserRoleAndPermissions.java | 115 +++++++++++++++
 .../jdo/permission/dom/ApplicationPermission.java  |  16 ++-
 .../secman/jdo/role/dom/ApplicationRole.java       |   9 +-
 .../secman/jdo/tenancy/dom/ApplicationTenancy.java |  11 +-
 .../secman/jdo/user/dom/ApplicationUser.java       |  16 ++-
 .../jpa/permission/dom/ApplicationPermission.java  |   2 +-
 .../secman/jpa/role/dom/ApplicationRole.java       |   3 +-
 .../secman/jpa/tenancy/dom/ApplicationTenancy.java |   2 +-
 .../secman/jpa/user/dom/ApplicationUser.java       |   2 +-
 .../jdo/metamodel/IsisModuleJdoMetamodel.java      |   2 +
 .../jdo/metamodel/menu/JdoMetamodelMenu.java       |  15 +-
 .../applib/IsisModuleSubdomainsExcelApplib.java    |   3 +
 .../subdomains/excel/testing/ExcelFixture.java     |   5 +-
 .../subdomains/excel/testing/ExcelFixture2.java    |   4 +-
 .../applib/IsisModuleTestingFixturesApplib.java    |   1 +
 .../applib/fixturescripts/FixtureResult.java       |   5 +-
 .../applib/fixturescripts/FixtureScripts.java      |   7 +-
 .../h2console/ui/IsisModuleTestingH2ConsoleUi.java |   1 +
 .../h2console/ui/services/H2ManagerMenu.java       |   5 +-
 .../hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java      |   1 +
 .../hsqldbmgr/dom/services/HsqlDbManagerMenu.java  |   5 +-
 .../common/applib/mixins/Object_impersonate.java   |   2 +-
 .../IsisModuleRestfulObjectsRendering.java         |   2 +
 .../service/swagger/SwaggerServiceMenu.java        |   7 +-
 .../service/swagger/internal/TaggerDefault.java    |   6 +
 .../service/swagger/internal/TaggerTest.java       |   4 +-
 94 files changed, 897 insertions(+), 492 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
index c538964..c3bf6a7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
@@ -94,6 +94,10 @@ import org.apache.isis.schema.IsisModuleSchema;
 })
 public class IsisModuleApplib {
 
+    public static final String NAMESPACE = "isis.applib";
+    public static final String NAMESPACE_CONF = "isis.conf";    // for configuration; to minimize the risk of granting perms accidentally
+    public static final String NAMESPACE_SUDO = "isis.sudo";    // for configuration; to minimize the risk of granting perms accidentally
+
     // -- UI EVENT CLASSES
 
     public abstract static class TitleUiEvent<S>
diff --git a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
index 2f345aa..10adaed 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
@@ -40,16 +40,16 @@ import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
 /**
  * The initial idea of {@link DomainObjectList} was to simplify restful clients.
  * <p>
- * In the original Restful Objects specification, invoking an action that returned 
- * a list meant that the RO client needed to handle this collection, which didn't 
- * have any identity. That made for special case logic in the client.  
+ * In the original Restful Objects specification, invoking an action that returned
+ * a list meant that the RO client needed to handle this collection, which didn't
+ * have any identity. That made for special case logic in the client.
  * <p>
- * Instead, if the RO client invokes the action but uses the <i>Accept Header</i> to 
- * request an object, then the RO viewer would automatically wrap the returned list 
+ * Instead, if the RO client invokes the action but uses the <i>Accept Header</i> to
+ * request an object, then the RO viewer would automatically wrap the returned list
  * in this {@link DomainObjectList} view model.
  * <p>
  * Thus, the RO client then only ever needs to know how to render an object, in all cases.
- *  
+ *
  * @since 1.x {@index}
  */
 @XmlRootElement(name = "list")
@@ -65,7 +65,7 @@ import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
         )
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObject(
-        objectType = "isis.applib.DomainObjectList",
+        objectType = DomainObjectList.OBJECT_TYPE,
         editing = Editing.DISABLED,
         nature = Nature.VIEW_MODEL
         )
@@ -77,6 +77,8 @@ import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
         )
 public class DomainObjectList {
 
+    public static final String OBJECT_TYPE = "isis.applib.DomainObjectList";
+
     // -- ui event classes
     public static class TitleUiEvent extends IsisModuleApplib.TitleUiEvent<DomainObjectList>{  }
     public static class IconUiEvent extends IsisModuleApplib.IconUiEvent<DomainObjectList>{  }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
index 30758d2..cf915b1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
@@ -36,11 +36,13 @@ import org.apache.isis.applib.services.factory.FactoryService;
  *
  * @since 2.0 {@index}
  */
-@Named("isis.applib.ConfigurationMenu")
-@DomainService(objectType = "isis.applib.ConfigurationMenu")
+@Named(ConfigurationMenu.OBJECT_TYPE)
+@DomainService(objectType = ConfigurationMenu.OBJECT_TYPE)
 @DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.TERTIARY)
 public class ConfigurationMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_CONF + ".ConfigurationMenu";
+
     public static abstract class ActionDomainEvent
             extends IsisModuleApplib.ActionDomainEvent<ConfigurationMenu> {}
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
index 340b7f6..68412ac 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
@@ -47,13 +48,15 @@ import lombok.Setter;
 )
 @DomainObject(
         editing = Editing.DISABLED,
-        objectType = "isis.applib.ConfigurationProperty"
+        objectType = ConfigurationProperty.OBJECT_TYPE
         )
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObjectLayout(paged = 999)
 @NoArgsConstructor
 public class ConfigurationProperty implements Comparable<ConfigurationProperty> {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_CONF + ".ConfigurationProperty";
+
     public ConfigurationProperty(final String key, final String value){
         this.key = key;
         this.value = value;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
index db21d02..f0a31e4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
@@ -23,34 +23,37 @@ import java.util.Set;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
-        objectType = "isis.applib.ConfigurationViewmodel")
+        objectType = ConfigurationViewmodel.OBJECT_TYPE)
 public class ConfigurationViewmodel {
-    
-    @Autowired(required = false) 
+
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_CONF + ".ConfigurationViewmodel";
+
+    @Autowired(required = false)
     private ConfigurationViewService configurationService;
 
     public String title() {
         return "Configuration";
     }
-    
+
     @Collection
     public Set<ConfigurationProperty> getEnvironment(){
         return configurationService!=null
                 ? configurationService.getEnvironmentProperties()
                 : Collections.emptySet();
     }
-    
+
     @Collection
     public Set<ConfigurationProperty> getConfiguration(){
         return configurationService!=null
                 ? configurationService.getVisibleConfigurationProperties()
                 : Collections.emptySet();
     }
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
index eea238c..8bddd35 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
@@ -42,14 +42,16 @@ import org.apache.isis.commons.internal.base._Strings;
  *
  * @since 1.x {@index}
  */
-@Named("isis.applib.LayoutServiceMenu")
-@DomainService(objectType = "isis.applib.LayoutServiceMenu")
+@Named(LayoutServiceMenu.OBJECT_TYPE)
+@DomainService(objectType = LayoutServiceMenu.OBJECT_TYPE)
 @DomainServiceLayout(
         named = "Prototyping",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+)
 public class LayoutServiceMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".LayoutServiceMenu";
+
     public static abstract class ActionDomainEvent
     extends IsisModuleApplib.ActionDomainEvent<LayoutServiceMenu> {}
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
index c4d2252..bfc0fe4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
@@ -53,14 +53,16 @@ import org.apache.isis.schema.metamodel.v2.MetamodelDto;
  *
  * @since 2.0 {@index}
  */
-@Named("isis.applib.MetaModelServiceMenu")
-@DomainService(objectType = "isis.applib.MetaModelServiceMenu")
+@Named(MetaModelServiceMenu.OBJECT_TYPE)
+@DomainService(objectType = MetaModelServiceMenu.OBJECT_TYPE)
 @DomainServiceLayout(
         named = "Prototyping",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
 )
 public class MetaModelServiceMenu {
 
+    public static final String OBJECT_TYPE = "isis.applib.MetaModelServiceMenu";
+
     public static abstract class ActionDomainEvent extends IsisModuleApplib.ActionDomainEvent<MetaModelServiceMenu> { }
 
     final MimeType mimeTypeTextCsv;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
index 94a3062..8a419b9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
@@ -42,7 +42,7 @@ import lombok.experimental.Accessors;
  */
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.applib.ImpersonateMenu"
+        objectType = ImpersonateMenu.OBJECT_TYPE
 )
 @DomainServiceLayout(
         named = "Security",
@@ -51,6 +51,8 @@ import lombok.experimental.Accessors;
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ImpersonateMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_SUDO + ".ImpersonateMenu";   // deliberately not part of isis.applib
+
     final UserService userService;
     final MessageService messageService;
     final List<ImpersonateMenuAdvisor> impersonateMenuAdvisors;
@@ -184,7 +186,4 @@ public class ImpersonateMenu {
         return ! this.userService.isImpersonating() ? "no user is currently being impersonated": null;
     }
 
-
-
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
index 2c98f97..bbc62d4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
@@ -31,10 +31,12 @@ import lombok.Value;
  *
  * @since 1.x revised for 2.0 {@index}
  */
-@DomainObject(objectType = "isis.applib.RoleMemento")
+@DomainObject(objectType = RoleMemento.OBJECT_TYPE)
 @Value
 public class RoleMemento implements Serializable {
 
+    public static final String OBJECT_TYPE = "isis.applib.RoleMemento";
+
     private static final long serialVersionUID = -3876856609238378274L;
 
     /**
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 8466a23..d4776d5 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
@@ -47,9 +47,11 @@ import lombok.val;
  *
  * @since 1.x revised for 2.0 {@index}
  */
-@DomainObject(objectType = "isis.applib.UserMemento")
+@DomainObject(objectType = UserMemento.OBJECT_TYPE)
 public final class UserMemento implements Serializable {
 
+    public static final String OBJECT_TYPE = "isis.applib.UserMemento";
+
     private static final long serialVersionUID = 7190090455587885367L;
     private static final UserMemento SYSTEM_USER = UserMemento.ofName("__system");
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
index 4002302..9fe2372 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -35,12 +36,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.ActionNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = ActionNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class ActionNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".ActionNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Action action;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
index 1ecf056..c4593d5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -35,12 +36,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.CollectionNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = CollectionNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class CollectionNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".CollectionNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Collection collection;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
index 71e55df..692dead 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -35,12 +36,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.FacetAttrNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = FacetAttrNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class FacetAttrNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".FacetAttrNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private FacetAttr facetAttr;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
index 5ac3478..2903085 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -36,12 +37,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.FacetGroupNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = FacetGroupNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class FacetGroupNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".FacetGroupNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Facets facets;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
index e099194..4a173b8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -36,12 +37,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.FacetNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = FacetNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class FacetNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".FacetNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Facet facet;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
index 5940d3c..3510b07 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -35,12 +36,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.ParameterNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = ParameterNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class ParameterNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".ParameterNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Param parameter;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
index a1c29a0..5298b49 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -34,12 +35,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.PropertyNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = PropertyNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class PropertyNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".PropertyNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private org.apache.isis.schema.metamodel.v2.Property property;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
index 273cd51..3f9d6b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
@@ -36,12 +37,17 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.DomainClassNode")
+@DomainObject(
+        nature=Nature.VIEW_MODEL,
+        objectType = TypeNode.OBJECT_TYPE
+)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
 public class TypeNode extends MMNode {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".TypeNode";
+
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private DomainClassDto domainClassDto;
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
index 7fe0eef..f388bc9 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
@@ -31,14 +31,16 @@ import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
 
-@Named("isis.applib.TranslationServicePoMenu")
-@DomainService(objectType = "isis.applib.TranslationServicePoMenu")
+@Named(TranslationServicePoMenu.OBJECT_TYPE)
+@DomainService(objectType = TranslationServicePoMenu.OBJECT_TYPE)
 @DomainServiceLayout(
         named = "Prototyping",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
 )
 public class TranslationServicePoMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE + ".TranslationServicePoMenu";
+
     @Inject private TranslationServicePo translationService;
 
     public static abstract class ActionDomainEvent extends IsisModuleApplib.ActionDomainEvent<TranslationServicePoMenu> {}
diff --git a/core/security/src/main/java/org/apache/isis/core/security/IsisModuleCoreSecurity.java b/core/security/src/main/java/org/apache/isis/core/security/IsisModuleCoreSecurity.java
index b3327d3..b916444 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/IsisModuleCoreSecurity.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/IsisModuleCoreSecurity.java
@@ -38,4 +38,6 @@ import org.apache.isis.core.security.authorization.manager.AuthorizationManager;
 
 })
 public class IsisModuleCoreSecurity {
+
+    public static final String NAMESPACE = "isis.security";
 }
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
index 32e1cbb..c22e8e8 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.applib.value.OpenUrlStrategy;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.security.IsisModuleCoreSecurity;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.AuthenticationContext;
 
@@ -48,7 +49,7 @@ import lombok.val;
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class LogoutMenu {
 
-    public static final String OBJECT_TYPE = "isis.security.LogoutMenu"; // referenced by secman seeding
+    public static final String OBJECT_TYPE = IsisModuleCoreSecurity.NAMESPACE + ".LogoutMenu"; // referenced by secman seeding
 
     private final List<LogoutHandler> logoutHandler;
     private final AuthenticationContext authenticationTracker;
diff --git a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/IsisModuleExtCommandLogJdo.java b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/IsisModuleExtCommandLogJdo.java
index c938043..d4044cb 100644
--- a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/IsisModuleExtCommandLogJdo.java
+++ b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/IsisModuleExtCommandLogJdo.java
@@ -52,6 +52,8 @@ import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAb
 public class IsisModuleExtCommandLogJdo
 implements IsisModuleExtCommandLogApplib {
 
+    public static final String NAMESPACE = "isis.ext.commandLog";
+
     /**
      * For tests that need to delete the command table first.
      * Should be run in the @Before of the test.
diff --git a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo.java b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo.java
index d4a5eca..0128614 100644
--- a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo.java
+++ b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo.java
@@ -54,6 +54,7 @@ import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.commons.functional.Result;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.extensions.commandlog.jdo.IsisModuleExtCommandLogJdo;
 import org.apache.isis.extensions.commandlog.model.command.CommandModel;
 import org.apache.isis.extensions.commandlog.model.command.ReplayState;
 import org.apache.isis.extensions.commandlog.model.util.BigDecimalUtils;
@@ -241,7 +242,7 @@ import lombok.val;
 //        @javax.jdo.annotations.Index(name = "CommandJdo__replayState__startedAt__completedAt_IDX", members = {"startedAt", "replayState", "completedAt"}),
 })
 @DomainObject(
-        objectType = "isis.ext.commandLog.Command",
+        objectType = CommandJdo.OBJECT_TYPE,
         editing = Editing.DISABLED
 )
 @DomainObjectLayout(
@@ -258,6 +259,8 @@ implements
     CommandModel,
     DomainChangeRecord {
 
+    public final static String OBJECT_TYPE = IsisModuleExtCommandLogJdo.NAMESPACE + ".Command";
+
     protected final static String FQCN = "org.apache.isis.extensions.commandlog.jdo.entities.CommandJdo";
 
     /**
diff --git a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/ui/CommandServiceMenu.java b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/ui/CommandServiceMenu.java
index bab99ad..30ff274 100644
--- a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/ui/CommandServiceMenu.java
+++ b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/ui/CommandServiceMenu.java
@@ -54,19 +54,21 @@ import lombok.RequiredArgsConstructor;
  */
 @DomainService(
     nature = NatureOfService.VIEW,
-    objectType = "isis.ext.commandLog.CommandServiceMenu"
+    objectType = CommandServiceMenu.OBJECT_TYPE
 )
 @DomainServiceLayout(
     named = "Activity",
     menuBar = DomainServiceLayout.MenuBar.SECONDARY
 )
 @Service
-@Named("isis.ext.commandLog.CommandServiceMenu")
+@Named(CommandServiceMenu.OBJECT_TYPE)
 @Order(OrderPrecedence.MIDPOINT)
 @Qualifier("Jdo")
 @RequiredArgsConstructor(onConstructor_ = { @Inject })
 public class CommandServiceMenu {
 
+    public final static String OBJECT_TYPE = IsisModuleExtCommandLogJdo.NAMESPACE + ".CommandServiceMenu";
+
     public static abstract class PropertyDomainEvent<T>
             extends IsisModuleExtCommandLogJdo.PropertyDomainEvent<CommandServiceMenu, T> { }
     public static abstract class CollectionDomainEvent<T>
diff --git a/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/IsisModuleExtCommandLogJpa.java b/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/IsisModuleExtCommandLogJpa.java
index b2ab657..41a55ac 100644
--- a/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/IsisModuleExtCommandLogJpa.java
+++ b/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/IsisModuleExtCommandLogJpa.java
@@ -46,4 +46,6 @@ import org.apache.isis.extensions.commandlog.jpa.entities.CommandJpaRepository;
         })
 public class IsisModuleExtCommandLogJpa {
 
+    public static final String NAMESPACE = "isis.ext.commandLog";
+
 }
diff --git a/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/entities/CommandJpa.java b/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/entities/CommandJpa.java
index d6e2117..711a438 100644
--- a/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/entities/CommandJpa.java
+++ b/extensions/core/command-log/jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/entities/CommandJpa.java
@@ -53,6 +53,7 @@ import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.commons.functional.Result;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa;
 import org.apache.isis.extensions.commandlog.model.command.CommandModel;
 import org.apache.isis.extensions.commandlog.model.command.ReplayState;
 import org.apache.isis.extensions.commandlog.model.util.BigDecimalUtils;
@@ -227,7 +228,7 @@ import lombok.val;
 */
 @Entity
 @DomainObject(
-        objectType = "isis.ext.commandLog.Command",
+        objectType = CommandJpa.OBJECT_TYPE,
         editing = Editing.DISABLED
 )
 @DomainObjectLayout(
@@ -244,6 +245,7 @@ implements
     CommandModel,
     DomainChangeRecord {
 
+    public final static String OBJECT_TYPE = IsisModuleExtCommandLogJpa.NAMESPACE + ".Command";
     protected final static String FQCN = "org.apache.isis.extensions.commandlog.jpa.entities.CommandJpa";
 
     /**
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
index e66d3a4..3b78177 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
@@ -50,6 +50,8 @@ import org.apache.isis.extensions.commandreplay.primary.ui.CommandReplayOnPrimar
 @Profile("primary")
 public class IsisModuleExtCommandReplayPrimary {
 
+    public static final String NAMESPACE = "isis.ext.commandReplayPrimary";
+
     public abstract static class ActionDomainEvent<S>
             extends org.apache.isis.applib.events.domain.ActionDomainEvent<S> { }
 
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
index 1b8ead9..27634a2 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
@@ -45,13 +45,15 @@ import lombok.Getter;
  */
 @DomainService(
     nature = NatureOfService.REST,
-    objectType = "isis.ext.commandReplayPrimary.CommandRetrievalService"
+    objectType = CommandRetrievalService.OBJECT_TYPE
 )
-@Named("isis.ext.commandReplayPrimary.CommandRetrievalService")
+@Named(CommandRetrievalService.OBJECT_TYPE)
 @Order(OrderPrecedence.MIDPOINT)
 //@Log4j2
 public class CommandRetrievalService {
 
+    public static final String OBJECT_TYPE = IsisModuleExtCommandReplayPrimary.NAMESPACE + ".CommandRetrievalService";
+
     public static abstract class ActionDomainEvent
             extends IsisModuleExtCommandReplayPrimary.ActionDomainEvent<CommandRetrievalService> { }
 
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
index cfdfee9..b083ffc 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
@@ -55,7 +55,7 @@ import lombok.RequiredArgsConstructor;
  */
 @DomainService(
     nature = NatureOfService.VIEW,
-    objectType = "isis.ext.commandReplayPrimary.CommandReplayOnPrimaryService"
+    objectType = CommandReplayOnPrimaryService.OBJECT_TYPE
 )
 @DomainServiceLayout(
     named = "Activity",
@@ -67,6 +67,8 @@ import lombok.RequiredArgsConstructor;
 //@Log4j2
 public class CommandReplayOnPrimaryService {
 
+    public static final String OBJECT_TYPE = IsisModuleExtCommandReplayPrimary.NAMESPACE + ".CommandReplayOnPrimaryService";
+
     @Inject final CommandModelRepository<? extends CommandModel> commandModelRepository;
     @Inject final JaxbService jaxbService;
     @Inject final MessageService messageService;
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
index da7c4fd..b5a39d8 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
@@ -82,6 +82,8 @@ import lombok.val;
 @Profile("secondary")
 public class IsisModuleExtCommandReplaySecondary {
 
+    public static final String NAMESPACE = "isis.ext.commandReplaySecondary";
+
     public abstract static class ActionDomainEvent<S>
             extends org.apache.isis.applib.events.domain.ActionDomainEvent<S> { }
 
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
index 0742f19..a8d0a42 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
@@ -49,7 +49,7 @@ import lombok.val;
  */
 @DomainService(
     nature = NatureOfService.VIEW,
-    objectType = "isis.ext.commandReplaySecondary.CommandReplayOnSecondaryService"
+    objectType = CommandReplayOnSecondaryService.OBJECT_TYPE
 )
 @DomainServiceLayout(
     named = "Activity",
@@ -61,6 +61,8 @@ import lombok.val;
 //@Log4j2
 public class CommandReplayOnSecondaryService {
 
+    public static final String OBJECT_TYPE = IsisModuleExtCommandReplaySecondary.NAMESPACE + ".CommandReplayOnSecondaryService";
+
     @Inject CommandModelRepository<? extends CommandModel> commandModelRepository;
     @Inject final JaxbService jaxbService;
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
index 87f33c0..bcb206d 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
@@ -171,6 +171,8 @@ import org.apache.isis.extensions.secman.api.user.menu.MeService;
 })
 public class IsisModuleExtSecmanApi {
 
+    public static final String NAMESPACE = "isis.ext.secman";
+
     public abstract static class ActionDomainEvent<S>
     extends org.apache.isis.applib.events.domain.ActionDomainEvent<S> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
index 31846ea..868feb2 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
@@ -22,6 +22,7 @@ import java.util.Set;
 import java.util.stream.Stream;
 
 import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.core.security.IsisModuleCoreSecurity;
 
 import lombok.Builder;
 import lombok.Getter;
@@ -29,44 +30,149 @@ import lombok.NonNull;
 import lombok.Singular;
 
 /**
+ * Applications consuming secman must instantiate a
+ * {@link org.springframework.context.annotation.Bean} of this type; secman
+ * then uses this bean to configure itself.
+ *
+ * <p>
+ * The typical place to create this bean is in the top-level
+ * <code>AppManifest</code>
+ * {@link org.springframework.context.annotation.Configuration} class.
+ * </p>
+ *
+ * <p>
+ * This class is implemented as a builder (courtesy of Lombok) but it
+ * provides reasonable defaults.
+ * </p>
+ *
  * @since 2.0 {@index}
  */
 @Builder
 public class SecmanConfiguration {
 
-    // -- ROLES
-
-    @Getter @Builder.Default @NonNull
-    final String regularUserRoleName = "secman-regular-user";
-
-    @Getter @Builder.Default @NonNull
-    final String fixtureRoleName = "secman-fixtures";
-
-    @Getter @Builder.Default @NonNull
-    final String adminRoleName = "secman-admin";
-
     // -- ADMIN
 
-    @Getter @Builder.Default @NonNull
+    /**
+     * The name of the security super user.
+     *
+     * <p>
+     * This user is automatically made a member of the
+     * {@link #getAdminRoleName() admin role}, from which it is granted
+     * permissions to administer other users.
+     * </p>
+     *
+     * <p>
+     * The password for this user is set in {@link #getAdminPassword()}.
+     * </p>
+     *
+     * @see #getAdminPassword()
+     * @see #getAdminRoleName()
+     */
+    @Getter
+    @Builder.Default
+    @NonNull
     final String adminUserName = "secman-admin";
 
     // sonar-ignore-on (detects potential security risk, which we are aware of)
-    @Getter @Builder.Default @NonNull
+    /**
+     * The corresponding password for {@link #getAdminUserName() admin user}.
+     *
+     * @see #getAdminUserName()
+     */
+    @Getter
+    @Builder.Default
+    @NonNull
     final String adminPassword = "pass";
     // sonar-ignore-off
 
     /**
-     * cannot be removed via user interface
+     * The name of security admin role.
+     *
+     * <p>
+     * Users with this role (in particular, the default
+     * {@link #getAdminUserName() admin user} are granted access to a set of
+     * namespaces ({@link #getAdminStickyNamespacePermissions()} and
+     * {@link #getAdminAdditionalNamespacePermissions()}) which are intended to
+     * be sufficient to allow users with this admin role to be able to
+     * administer the security module itself, for example to manage users and
+     * roles.
+     * </p>
+     *
+     * @see #getAdminUserName()
+     * @see #getAdminStickyNamespacePermissions()
+     * @see #getAdminAdditionalNamespacePermissions()
      */
-    @Getter @Builder.Default @NonNull
+    @Getter
+    @Builder.Default
+    @NonNull
+    final String adminRoleName = "secman-admin";
+
+    /**
+     * The set of namespaces to which the {@link #getAdminRoleName() admin role}
+     * is granted.
+     *
+     * <p>
+     * These namespaces are intended to be sufficient to allow users with
+     * this admin role to be able to administer the security module itself,
+     * for example to manage users and roles.  The security user is not
+     * necessarily able to use the main business logic within the domain
+     * application itself, though.
+     * </p>
+     *
+     * <p>
+     * These roles cannot be removed via user interface
+     * </p>
+     *
+     * <p>
+     * WARNING: normally these should not be overridden.  Instead, specify
+     * additional namespaces using
+     * {@link #getAdminAdditionalNamespacePermissions()}.
+     * </p>
+     *
+     * @see #getAdminAdditionalNamespacePermissions()
+     */
+    @Getter
+    @Builder.Default
+    @NonNull
     final String[] adminStickyNamespacePermissions = new String[]{
-            "isis.security",
-            "isis.ext.secman"
+            IsisModuleCoreSecurity.NAMESPACE,
+            IsisModuleExtSecmanApi.NAMESPACE
     };
 
-    @Getter @Singular
+    /**
+     * An (optional) additional set of namespaces that the
+     * {@link #getAdminRoleName() admin role} is granted.
+     *
+     * <p>
+     * These are in addition to the main
+     * {@link #getAdminStickyNamespacePermissions() namespaces} granted.
+     * </p>
+     *
+     * @see #getAdminStickyNamespacePermissions()
+     */
+    @Getter
+    @Singular
     final Set<String> adminAdditionalNamespacePermissions;
 
+
+    // -- REGULAR USER
+
+    /**
+     * The role name for regular users of the application, granting them access
+     * to basic security features.
+     *
+     * <p>
+     *     The exact set of permissions is hard-wired in the
+     *     <code>IsisExtSecmanRegularUserRoleAndPermissions</code> fixture.
+     * </p>
+     */
+    @Getter
+    @Builder.Default
+    @NonNull
+    final String regularUserRoleName = "secman-regular-user";
+
+
+
     /**
      * Delegated users, on first successful logon, are auto-created but disabled (by default).
      * <p>
@@ -74,11 +180,12 @@ public class SecmanConfiguration {
      * users are also auto-enabled.
      * <p>
      * default: false
-     *
      */
-    @Getter @Builder.Default
+    @Getter
+    @Builder.Default
     final boolean autoEnableIfDelegatedAndAuthenticated = false;
 
+
     // -- UTILITIES
 
     public Stream<String> streamAdminNamespacePermissions() {
@@ -89,8 +196,7 @@ public class SecmanConfiguration {
 
     public boolean isStickyAdminNamespace(String featureFqn) {
         return _NullSafe.stream(adminStickyNamespacePermissions)
-        .anyMatch(stickyPackage->stickyPackage.equals(featureFqn));
+                .anyMatch(stickyPackage -> stickyPackage.equals(featureFqn));
     }
 
-
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java
index 35714d8..0cee19c 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.commons.internal.functions._Predicates;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 import lombok.AllArgsConstructor;
 import lombok.EqualsAndHashCode;
@@ -112,13 +113,16 @@ public class ApplicationFeatureChoices {
      */
     @DomainObject(
             nature = Nature.VIEW_MODEL,
-            objectType = "isis.ext.secman.AppFeat")
+            objectType = AppFeat.OBJECT_TYPE
+    )
     @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode
     public static class AppFeat
     implements
         Comparable<AppFeat>,
         ViewModel {
 
+        public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".AppFeat";
+
         @Property
         @Getter
         private ApplicationFeatureId featureId;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java
index 1660776..985622a 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java
@@ -63,10 +63,12 @@ import lombok.val;
  * View model identified by {@link ApplicationFeatureId} and backed by an {@link ApplicationFeature}.
  */
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationFeatureViewModel"
-        )
+        objectType = ApplicationFeatureViewModel.OBJECT_TYPE
+)
 public abstract class ApplicationFeatureViewModel implements ViewModel {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationFeatureViewModel";
+
     public static abstract class PropertyDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<S, T> {}
     public static abstract class CollectionDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<S, T> {}
     public static abstract class ActionDomainEvent<S extends ApplicationFeatureViewModel> extends IsisModuleExtSecmanApi.ActionDomainEvent<S> {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java
index dde3280..a01067b 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java
@@ -39,14 +39,16 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.ApplicationFeatureViewModels"
-        )
+        objectType = ApplicationFeatureViewModels.OBJECT_TYPE
+)
 @DomainServiceLayout(
         named="Security",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+)
 public class ApplicationFeatureViewModels  {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationFeatureViewModels";
+
     public static abstract class PropertyDomainEvent<T>
     extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationFeatureViewModels, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java
index ae5e0ec..4c8c326 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java
@@ -31,13 +31,16 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationNamespace"
-        )
+        objectType = ApplicationNamespace.OBJECT_TYPE
+)
 @DomainObjectLayout(paged=100)
 public class ApplicationNamespace extends ApplicationFeatureViewModel {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationNamespace";
+
     public static abstract class CollectionDomainEvent<T> extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationNamespace, T> {}
 
     // -- constructors
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java
index d8a0ddf..ec369e6 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java
@@ -31,16 +31,19 @@ import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationType"
-        )
+        objectType = ApplicationType.OBJECT_TYPE
+)
 @DomainObjectLayout(
-        paged=100,
-        bookmarking = BookmarkPolicy.AS_ROOT
-        )
+        bookmarking = BookmarkPolicy.AS_ROOT,
+        paged=100
+)
 public class ApplicationType extends ApplicationFeatureViewModel {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationType";
+
     public static abstract class CollectionDomainEvent<T>
             extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationType, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java
index c06d14e..53beb99 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java
@@ -29,13 +29,18 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationClassAction"
-        )
-@DomainObjectLayout(paged=100)
+        objectType = ApplicationTypeAction.OBJECT_TYPE
+)
+@DomainObjectLayout(
+        paged = 100
+)
 public class ApplicationTypeAction extends ApplicationTypeMember {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeAction";
+
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeAction, T> {}
 
     // -- constructors
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java
index 07b8a67..bad7cc8 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java
@@ -27,13 +27,18 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationClassCollection"
-        )
-@DomainObjectLayout(paged=100)
+        objectType = ApplicationTypeCollection.OBJECT_TYPE
+)
+@DomainObjectLayout(
+        paged = 100
+)
 public class ApplicationTypeCollection extends ApplicationTypeMember {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeCollection";
+
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeCollection, T> {}
 
     // -- constructors
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java
index 574d48a..adaa5b9 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java
@@ -29,18 +29,21 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 import lombok.NoArgsConstructor;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationTypeMember"
-        )
+        objectType = ApplicationTypeMember.OBJECT_TYPE
+)
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_CHILD
-        )
+)
 @NoArgsConstructor
 public abstract class ApplicationTypeMember extends ApplicationFeatureViewModel {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeMember";
+
     public static abstract class PropertyDomainEvent<S extends ApplicationTypeMember, T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationTypeMember, T> {}
 
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml
new file mode 100644
index 0000000..e865ea9
--- /dev/null
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+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.
+-->
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <bs3:row>
+        <bs3:col span="12" unreferencedActions="true">
+            <cpt:domainObject/>
+        </bs3:col>
+    </bs3:row>
+    <bs3:row>
+        <bs3:col span="4">
+            <bs3:tabGroup>
+                <bs3:tab name="Identity">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Identity" id="identity"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Other">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Metadata">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Metadata" id="metadata"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+        <bs3:col span="4">
+            <bs3:tabGroup collapseIfOne="false">
+                <bs3:tab name="Hierarchy">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Parent" id="parent"/>
+                        </bs3:col>
+                    </bs3:row>
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id="contents"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+        <bs3:col span="4">
+            <bs3:tabGroup>
+                <bs3:tab name="Detail">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Detail" id="detail"/>
+                            <cpt:fieldSet name="Data Type" id="dataType"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Contributed">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Contributed" id="contributed"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Permissions">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id="permissions"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+    </bs3:row>
+    <bs3:row>
+        <bs3:col span="12">
+            <bs3:tabGroup>
+                <bs3:tab name="Actions">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id="actions"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Properties">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id="properties"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Collections">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id="collections"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+    </bs3:row>
+    <bs3:row>
+        <bs3:col span="12">
+            <bs3:tabGroup unreferencedCollections="true"/>
+        </bs3:col>
+    </bs3:row>
+</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java
index b236e77..7923447 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java
@@ -29,15 +29,18 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 import lombok.val;
 
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationClassProperty"
-        )
+        objectType = ApplicationTypeProperty.OBJECT_TYPE
+)
 @DomainObjectLayout(paged=100)
 public class ApplicationTypeProperty extends ApplicationTypeMember {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeProperty";
+
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeProperty, T> {}
 
     // -- constructors
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/ApplicationOrphanedPermissionManager.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/ApplicationOrphanedPermissionManager.java
index 0abbaec..3f94906 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/ApplicationOrphanedPermissionManager.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/ApplicationOrphanedPermissionManager.java
@@ -30,10 +30,12 @@ import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissio
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
-        objectType = "isis.ext.secman.ApplicationOrphanedPermissionManager"
-        )
+        objectType = ApplicationOrphanedPermissionManager.OBJECT_TYPE
+)
 public class ApplicationOrphanedPermissionManager {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationOrphanedPermissionManager";
+
     public static abstract class CollectionDomainEvent<T>
             extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationOrphanedPermissionManager, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermission.java
index bf14d91..3d2d590 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermission.java
@@ -75,9 +75,13 @@ import lombok.experimental.UtilityClass;
  *
  * @since 2.0 {@index}
  */
-@DomainObject(objectType = "isis.ext.secman.api.ApplicationPermission")
+@DomainObject(
+        objectType = ApplicationPermission.OBJECT_TYPE
+)
 public interface ApplicationPermission extends Comparable<ApplicationPermission> {
 
+    String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".api.ApplicationPermission";
+
     String NAMED_QUERY_FIND_BY_FEATURE = "ApplicationPermission.findByFeature";
     String NAMED_QUERY_FIND_BY_ROLE = "ApplicationPermission.findByRole";
     String NAMED_QUERY_FIND_BY_ROLE_RULE_FEATURE = "ApplicationPermission.findByRoleAndRuleAndFeature";
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/menu/ApplicationPermissionMenu.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/menu/ApplicationPermissionMenu.java
index 67bb6ec..a718750 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/menu/ApplicationPermissionMenu.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/menu/ApplicationPermissionMenu.java
@@ -37,14 +37,16 @@ import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissio
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.ApplicationPermissionMenu"
-        )
+        objectType = ApplicationPermissionMenu.OBJECT_TYPE
+)
 @DomainServiceLayout(
-        named="Security",
-        menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+        menuBar = DomainServiceLayout.MenuBar.SECONDARY,
+        named="Security"
+)
 public class ApplicationPermissionMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationPermissionMenu";
+
     // -- domain event classes
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationPermissionMenu, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationPermissionMenu, T> {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
index bb47b27..1c2fdec 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
@@ -41,9 +41,13 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
 /**
  * @since 2.0 {@index}
  */
-@DomainObject(objectType = "isis.ext.secman.api.ApplicationRole")
+@DomainObject(
+        objectType = ApplicationRole.OBJECT_TYPE
+)
 public interface ApplicationRole extends Comparable<ApplicationRole> {
 
+    String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationRole";
+
     String NAMED_QUERY_FIND_BY_NAME = "ApplicationRole.findByName";
     String NAMED_QUERY_FIND_BY_NAME_CONTAINING = "ApplicationRole.findByNameContaining";
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/menu/ApplicationRoleMenu.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/menu/ApplicationRoleMenu.java
index 7f1b015..5c83833 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/menu/ApplicationRoleMenu.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/menu/ApplicationRoleMenu.java
@@ -39,15 +39,17 @@ import lombok.RequiredArgsConstructor;
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.ApplicationRoleMenu"
-        )
+        objectType = ApplicationRoleMenu.OBJECT_TYPE
+)
 @DomainServiceLayout(
         named = "Security",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+)
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ApplicationRoleMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationRoleMenu";
+
     // -- domain event classes
     public static class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationRoleMenu, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationRoleMenu, T> {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/ApplicationTenancy.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/ApplicationTenancy.java
index 0b201db..2011e72 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/ApplicationTenancy.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/ApplicationTenancy.java
@@ -37,9 +37,13 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 /**
  * @since 2.0 {@index}
  */
-@DomainObject(objectType = "isis.ext.secman.api.ApplicationTenancy")
+@DomainObject(
+        objectType = ApplicationTenancy.OBJECT_TYPE
+)
 public interface ApplicationTenancy extends Comparable<ApplicationTenancy> {
 
+    String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTenancy";
+
     String NAMED_QUERY_FIND_BY_NAME = "ApplicationTenancy.findByName";
     String NAMED_QUERY_FIND_BY_PATH = "ApplicationTenancy.findByPath";
     String NAMED_QUERY_FIND_BY_NAME_OR_PATH_MATCHING = "ApplicationTenancy.findByNameOrPathMatching";
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/menu/ApplicationTenancyMenu.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/menu/ApplicationTenancyMenu.java
index dd2ea23..156a490 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/menu/ApplicationTenancyMenu.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/menu/ApplicationTenancyMenu.java
@@ -39,14 +39,16 @@ import org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancyRepos
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.ApplicationTenancyMenu"
-        )
+        objectType = ApplicationTenancyMenu.OBJECT_TYPE
+)
 @DomainServiceLayout(
         named = "Security",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+)
 public class ApplicationTenancyMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTenancyMenu";
+
     // -- domain event classes
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationTenancyMenu, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationTenancyMenu, T> {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/ApplicationUserManager.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/ApplicationUserManager.java
index f778415..9b9d883 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/ApplicationUserManager.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/ApplicationUserManager.java
@@ -20,23 +20,20 @@ package org.apache.isis.extensions.secman.api.user.app;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
-        objectType = "isis.ext.secman.ApplicationUserManager"
-        )
+        objectType = ApplicationUserManager.OBJECT_TYPE
+)
 public class ApplicationUserManager {
 
-//    @Inject private ApplicationUserRepository applicationUserRepository;
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationUserManager";
 
     public String title() {
         return "Application User Manager";
     }
 
-//XXX provided via mixins, that is one specific to JPA the other specific to JDO
-//    @Collection
-//    public java.util.Collection<? extends ApplicationUser> getAllUsers() {
-//        return applicationUserRepository.allUsers();
-//    }
+    // behaviour provided by mixins
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/ApplicationUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/ApplicationUser.java
index f23063a..7e5649f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/ApplicationUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/ApplicationUser.java
@@ -51,10 +51,14 @@ import lombok.val;
 /**
  * @since 2.0 {@index}
  */
-@DomainObject(objectType = "isis.ext.secman.api.ApplicationUser")
+@DomainObject(
+        objectType = ApplicationUser.OBJECT_TYPE
+)
 public interface ApplicationUser
         extends HasUsername, HasAtPath, Comparable<ApplicationUser> {
 
+    String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationUser";
+
     // -- CONSTANTS
 
     String NAMED_QUERY_FIND_BY_USERNAME = "ApplicationUser.findByUsername";
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
index 6c49787..7d4ebfc 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
@@ -70,24 +70,25 @@ import lombok.val;
  */
 @DomainObject(
         nature = Nature.VIEW_MODEL,
-        objectType = "isis.ext.secman.UserPermissionViewModel"
-        )
+        objectType = UserPermissionViewModel.OBJECT_TYPE
+)
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_ROOT
-        )
+)
 public class UserPermissionViewModel implements ViewModel {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".UserPermissionViewModel";
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<UserPermissionViewModel, T> {}
-    public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<UserPermissionViewModel, T> {}
-    public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<UserPermissionViewModel> {}
 
 
-    @Inject private ApplicationUserRepository applicationUserRepository;
-    @Inject private FactoryService factory;
-    @Inject private ApplicationFeatureRepository featureRepository;
-    @Inject private ApplicationPermissionRepository applicationPermissionRepository;
+    @Inject ApplicationUserRepository applicationUserRepository;
+    @Inject FactoryService factory;
+    @Inject ApplicationFeatureRepository featureRepository;
+    @Inject ApplicationPermissionRepository applicationPermissionRepository;
 
     // -- constructors, factory methods
+
     public static UserPermissionViewModel newViewModel(
             final ApplicationFeatureId featureId,
             final ApplicationUser user,
@@ -115,6 +116,7 @@ public class UserPermissionViewModel implements ViewModel {
         return "userPermission";
     }
 
+
     // -- ViewModel impl
     @Override
     public String viewModelMemento() {
@@ -149,22 +151,22 @@ public class UserPermissionViewModel implements ViewModel {
         final ApplicationFeatureId changingEvaluationCauseFeatureId = changingEvaluationCause != null? changingEvaluationCause.getFeatureId(): null;
 
         return join(
-        username,
-
-        viewingEvaluationGranted,
-        viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getSort(): "",
-        viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
-        viewingEvaluationCause != null? viewingEvaluationCause.getRule(): "",
-        viewingEvaluationCause != null? viewingEvaluationCause.getMode(): "",
-
-        changingEvaluationGranted,
-        changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getSort(): "",
-        changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
-        changingEvaluationCause != null? changingEvaluationCause.getRule(): "",
-        changingEvaluationCause != null? changingEvaluationCause.getMode(): "",
-
-        featureId.getSort(),
-        featureId.getFullyQualifiedName()
+            username,
+
+            viewingEvaluationGranted,
+            viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getSort(): "",
+            viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
+            viewingEvaluationCause != null? viewingEvaluationCause.getRule(): "",
+            viewingEvaluationCause != null? viewingEvaluationCause.getMode(): "",
+
+            changingEvaluationGranted,
+            changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getSort(): "",
+            changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
+            changingEvaluationCause != null? changingEvaluationCause.getRule(): "",
+            changingEvaluationCause != null? changingEvaluationCause.getMode(): "",
+
+            featureId.getSort(),
+            featureId.getFullyQualifiedName()
         );
     }
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/ApplicationUserMenu.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/ApplicationUserMenu.java
index 3738161..d88da9e 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/ApplicationUserMenu.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/ApplicationUserMenu.java
@@ -35,173 +35,62 @@ import org.apache.isis.extensions.secman.api.user.app.ApplicationUserManager;
 import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
 import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 
+import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.ApplicationUserMenu"
+        objectType = ApplicationUserMenu.OBJECT_TYPE
         )
 @DomainServiceLayout(
         named = "Security",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+    )
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ApplicationUserMenu {
 
-    //@Inject private SecmanConfiguration configBean;
-    //@Inject private ApplicationRoleRepository applicationRoleRepository;
-    @Inject private ApplicationUserRepository applicationUserRepository;
-    //@Inject private SecurityRealmService securityRealmService;
-    @Inject private FactoryService factory;
-
-    public static abstract class PropertyDomainEvent<T>
-    extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationUserMenu, T> {
-    }
-
-    public static abstract class CollectionDomainEvent<T>
-    extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationUserMenu, T> {
-    }
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationUserMenu";
 
     public static abstract class ActionDomainEvent
-    extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationUserMenu> {
-    }
+        extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationUserMenu> { }
+
+    private final ApplicationUserRepository applicationUserRepository;
+    private final FactoryService factory;
 
-    public static class FindUsersByNameDomainEvent
-    extends ActionDomainEvent {
-    }
 
     public String iconName() {
         return "applicationUser";
     }
 
+
+
+    public static class FindUsersByNameDomainEvent
+        extends ActionDomainEvent { }
+
     @Action(
             domainEvent = FindUsersByNameDomainEvent.class,
             semantics = SemanticsOf.SAFE
-            )
+    )
     @ActionLayout(sequence = "100.10.2")
     public Collection<? extends ApplicationUser> findUsers(
             final @ParameterLayout(named = "Search") String search) {
         return applicationUserRepository.find(search);
     }
 
-    public static class ApplicationUserManagerDomainEvent extends ActionDomainEvent {
-    }
+
+
+    public static class UserManagerDomainEvent extends ActionDomainEvent { }
 
     @Action(
-            domainEvent = ApplicationUserManagerDomainEvent.class,
+            domainEvent = UserManagerDomainEvent.class,
             semantics = SemanticsOf.IDEMPOTENT
-            )
+    )
     @ActionLayout(
             sequence = "100.10.3",
-            cssClassFa = "user-plus" )
+            cssClassFa = "user-plus"
+    )
     public ApplicationUserManager userManager() {
-        val applicationUserManager = factory.viewModel(new ApplicationUserManager());
-        return applicationUserManager;
+        return factory.viewModel(new ApplicationUserManager());
     }
 
-//    public static class NewDelegateUserDomainEvent extends ActionDomainEvent {
-//    }
-//
-//    @Action(
-//            domainEvent = NewDelegateUserDomainEvent.class,
-//            semantics = SemanticsOf.NON_IDEMPOTENT
-//            )
-//    @ActionLayout(sequence = "100.10.3", cssClassFa = "user-plus")
-//    public ApplicationUser newDelegateUser(
-//            @Parameter(maxLength = ApplicationUser.MAX_LENGTH_USERNAME)
-//            @ParameterLayout(named = "Name")
-//            final String username,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Initial role")
-//            final ApplicationRole initialRole,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Enabled?")
-//            final Boolean enabled) {
-//
-//        val applicationUserManager = factory.viewModel(new ApplicationUserManager());
-//        val newDelegateUserMixin = factory.mixin(
-//                ApplicationUserManager_newDelegateUser.class, applicationUserManager);
-//        return newDelegateUserMixin.act(username, initialRole, enabled);
-//    }
-//
-//    public boolean hideNewDelegateUser() {
-//        return hasNoDelegateAuthenticationRealm();
-//    }
-//
-//    public ApplicationRole default1NewDelegateUser() {
-//        return applicationRoleRepository.findByNameCached(configBean.getRegularUserRoleName()).orElse(null);
-//    }
-
-//    public static class NewLocalUserDomainEvent extends ActionDomainEvent {
-//    }
-//
-//    @Action(
-//            domainEvent = NewLocalUserDomainEvent.class,
-//            semantics = SemanticsOf.IDEMPOTENT
-//            )
-//    @ActionLayout(sequence = "100.10.4", cssClassFa = "user-plus")
-//    public ApplicationUser newLocalUser(
-//            @Parameter(maxLength = ApplicationUser.MAX_LENGTH_USERNAME)
-//            @ParameterLayout(named = "Name")
-//            final String username,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Password")
-//            final Password password,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Repeat password")
-//            final Password passwordRepeat,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Initial role")
-//            final ApplicationRole initialRole,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Enabled?")
-//            final Boolean enabled,
-//            @Parameter(optionality = Optionality.OPTIONAL)
-//            @ParameterLayout(named = "Email Address")
-//            final String emailAddress) {
-//
-//        val applicationUserManager = factory.viewModel(new ApplicationUserManager());
-//        val newLocalUserMixin = factory.mixin(
-//                ApplicationUserManager_newLocalUser.class, applicationUserManager);
-//        return newLocalUserMixin.doAct(username, password, passwordRepeat, initialRole, enabled, emailAddress);
-//    }
-//
-//    public String validateNewLocalUser(
-//            final String username,
-//            final Password password,
-//            final Password passwordRepeat,
-//            final ApplicationRole initialRole,
-//            final Boolean enabled,
-//            final String emailAddress) {
-//
-//        val applicationUserManager = factory.viewModel(new ApplicationUserManager());
-//        val newLocalUserMixin = factory.mixin(
-//                ApplicationUserManager_newLocalUser.class, applicationUserManager);
-//
-//        return newLocalUserMixin.doValidate(
-//                username, password, passwordRepeat, initialRole, enabled, emailAddress);
-//    }
-//
-//    public ApplicationRole default3NewLocalUser() {
-//        return applicationRoleRepository.findByNameCached(configBean.getRegularUserRoleName()).orElse(null);
-//    }
-
-//    public static class AllUsersDomainEvent extends ActionDomainEvent {
-//    }
-//
-//    @Action(
-//            domainEvent = AllUsersDomainEvent.class,
-//            semantics = SemanticsOf.SAFE
-//            )
-//    @ActionLayout(sequence = "100.10.5")
-//    public Collection<? extends ApplicationUser> allUsers() {
-//        return applicationUserRepository.allUsers();
-//    }
-//
-//    private boolean hasNoDelegateAuthenticationRealm() {
-//        val realm = securityRealmService.getCurrentRealm();
-//        return realm == null || !realm.getCharacteristics().contains(SecurityRealmCharacteristic.DELEGATING);
-//    }
-
-
-
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/MeService.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/MeService.java
index 1ec4621..25f9b9d 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/MeService.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/menu/MeService.java
@@ -39,13 +39,15 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
  */
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.secman.MeService"
-        )
+        objectType = MeService.OBJECT_TYPE
+)
 @DomainServiceLayout(
         menuBar = DomainServiceLayout.MenuBar.TERTIARY
-        )
+)
 public class MeService {
 
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".MeService";
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<MeService, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<MeService, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<MeService> {}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
deleted file mode 100644
index 638eae6..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
+++ /dev/null
@@ -1,89 +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.extensions.secman.model.seed.scripts;
-
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.security.authentication.logout.LogoutMenu;
-import org.apache.isis.extensions.secman.api.SecmanConfiguration;
-import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-import org.apache.isis.extensions.secman.api.user.menu.MeService;
-
-import lombok.val;
-
-/**
- * Role for regular users of the security module, providing the ability to lookup their user account using the
- * {@link MeService}, and for viewing and maintaining their user details.
- *
- * @since 2.0 {@index}
- */
-public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
-
-    public IsisExtSecmanRegularUserRoleAndPermissions(SecmanConfiguration configBean) {
-        super(configBean.getRegularUserRoleName(), "Regular user of the security module");
-    }
-
-    @Override
-    protected void execute(ExecutionContext executionContext) {
-
-        val allowViewing = Can.of(
-                ApplicationFeatureId.newType("isis.ext.secman.ApplicationUser"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationRole", "name"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationRole", "description")
-                );
-
-        val allowChanging = Can.of(
-                ApplicationFeatureId.newMember(LogoutMenu.OBJECT_TYPE, "logout"),
-                ApplicationFeatureId.newMember("isis.ext.secman.MeService", "me"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "updateName"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "updatePassword"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "updateEmailAddress"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "updatePhoneNumber"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "updateFaxNumber")
-                );
-
-        val vetoViewing = Can.of(
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "filterPermissions"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "resetPassword"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "lock"), // named 'enable' in the UI
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "unlock"), // named 'disable' in the UI
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "addRole"),
-                ApplicationFeatureId.newMember("isis.ext.secman.ApplicationUser", "removeRoles")
-                );
-
-        newPermissions(
-                ApplicationPermissionRule.ALLOW,
-                ApplicationPermissionMode.VIEWING,
-                allowViewing);
-
-        newPermissions(
-                ApplicationPermissionRule.ALLOW,
-                ApplicationPermissionMode.CHANGING,
-                allowChanging);
-
-        newPermissions(
-                ApplicationPermissionRule.VETO,
-                ApplicationPermissionMode.VIEWING,
-                vetoViewing);
-
-    }
-
-}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/SeedUsersAndRolesFixtureScript.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/SeedUsersAndRolesFixtureScript.java
index 9a7bd38..25ff7f4 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/SeedUsersAndRolesFixtureScript.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/SeedUsersAndRolesFixtureScript.java
@@ -22,6 +22,16 @@ import javax.inject.Inject;
 
 import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.model.seed.SeedSecurityModuleService;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisApplibConfigurationRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisApplibMetaModelRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisApplibTranslationRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisExtFixturesRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisSudoImpersonateRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.other.IsisViewerRestfulObjectsSwaggerRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.secman.GlobalTenancy;
+import org.apache.isis.extensions.secman.model.seed.scripts.secman.IsisExtSecmanAdminRoleAndPermissions;
+import org.apache.isis.extensions.secman.model.seed.scripts.secman.IsisExtSecmanAdminUser;
+import org.apache.isis.extensions.secman.model.seed.scripts.secman.IsisExtSecmanRegularUserRoleAndPermissions;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 
 /**
@@ -43,18 +53,18 @@ public class SeedUsersAndRolesFixtureScript extends FixtureScript {
         // global tenancy
         executionContext.executeChild(this, new GlobalTenancy());
 
-        // security module
+        // secman (admin and regular users)
         executionContext.executeChild(this, new IsisExtSecmanAdminRoleAndPermissions(configBean));
-
-        executionContext.executeChild(this, new IsisExtSecmanFixtureRoleAndPermissions(configBean));
-        executionContext.executeChild(this, new IsisExtSecmanRegularUserRoleAndPermissions(configBean));
-
         executionContext.executeChild(this, new IsisExtSecmanAdminUser(configBean));
+        executionContext.executeChild(this, new IsisExtSecmanRegularUserRoleAndPermissions(configBean));
 
-        // isis applib
-        executionContext.executeChild(this, new IsisExtFixturesFixtureResultsRoleAndPermissions());
+        // other modules
+        executionContext.executeChild(this, new IsisApplibConfigurationRoleAndPermissions());
+        executionContext.executeChild(this, new IsisApplibTranslationRoleAndPermissions());
+        executionContext.executeChild(this, new IsisApplibMetaModelRoleAndPermissions());
+        executionContext.executeChild(this, new IsisExtFixturesRoleAndPermissions());
+        executionContext.executeChild(this, new IsisSudoImpersonateRoleAndPermissions());
+        executionContext.executeChild(this, new IsisViewerRestfulObjectsSwaggerRoleAndPermissions());
     }
 
-
-
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibConfigurationRoleAndPermissions.java
similarity index 64%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibConfigurationRoleAndPermissions.java
index 1e815f8..4a4f784 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibConfigurationRoleAndPermissions.java
@@ -16,9 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.confview.ConfigurationMenu;
+import org.apache.isis.applib.services.confview.ConfigurationProperty;
+import org.apache.isis.applib.services.confview.ConfigurationViewmodel;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
@@ -28,13 +31,13 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 /**
  * @since 2.0 {@index}
  */
-public class IsisExtFixturesFixtureResultsRoleAndPermissions
+public class IsisApplibConfigurationRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
+    public static final String ROLE_NAME = ConfigurationMenu.OBJECT_TYPE.replace(".","-");
 
-    public IsisExtFixturesFixtureResultsRoleAndPermissions() {
-        super(ROLE_NAME, "Access results of running Fixture Scripts");
+    public IsisApplibConfigurationRoleAndPermissions() {
+        super(ROLE_NAME, "Access configuration properties");
     }
 
     @Override
@@ -42,7 +45,11 @@ extends AbstractRoleAndPermissionsFixtureScript {
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newType(FixtureResult.OBJECT_TYPE)));
+                Can.of(
+                        ApplicationFeatureId.newType(ConfigurationMenu.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ConfigurationProperty.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ConfigurationViewmodel.OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibMetaModelRoleAndPermissions.java
similarity index 69%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibMetaModelRoleAndPermissions.java
index 1e815f8..9cf9a0d 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibMetaModelRoleAndPermissions.java
@@ -16,25 +16,27 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.layout.LayoutServiceMenu;
+import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu;
+import org.apache.isis.applib.services.user.ImpersonateMenu;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 
 /**
  * @since 2.0 {@index}
  */
-public class IsisExtFixturesFixtureResultsRoleAndPermissions
+public class IsisApplibMetaModelRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
+    public static final String ROLE_NAME = MetaModelServiceMenu.OBJECT_TYPE.replace(".","-");
 
-    public IsisExtFixturesFixtureResultsRoleAndPermissions() {
-        super(ROLE_NAME, "Access results of running Fixture Scripts");
+    public IsisApplibMetaModelRoleAndPermissions() {
+        super(ROLE_NAME, "Access to the metamodel");
     }
 
     @Override
@@ -42,7 +44,9 @@ extends AbstractRoleAndPermissionsFixtureScript {
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newType(FixtureResult.OBJECT_TYPE)));
+                Can.of(
+                        ApplicationFeatureId.newType(MetaModelServiceMenu.OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibTranslationRoleAndPermissions.java
similarity index 73%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibTranslationRoleAndPermissions.java
index 1e815f8..62c91ec 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisApplibTranslationRoleAndPermissions.java
@@ -16,25 +16,26 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 
 /**
  * @since 2.0 {@index}
  */
-public class IsisExtFixturesFixtureResultsRoleAndPermissions
+public class IsisApplibTranslationRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
+    private static final String SERVICE_OBJECT_TYPE = "isis.applib.TranslationServicePoMenu";
 
-    public IsisExtFixturesFixtureResultsRoleAndPermissions() {
-        super(ROLE_NAME, "Access results of running Fixture Scripts");
+    public static final String ROLE_NAME = SERVICE_OBJECT_TYPE.replace(".","-");
+
+    public IsisApplibTranslationRoleAndPermissions() {
+        super(ROLE_NAME, "Access to translation management");
     }
 
     @Override
@@ -42,7 +43,9 @@ extends AbstractRoleAndPermissionsFixtureScript {
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newType(FixtureResult.OBJECT_TYPE)));
+                Can.of(
+                        ApplicationFeatureId.newType(SERVICE_OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtFixturesRoleAndPermissions.java
similarity index 64%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtFixturesRoleAndPermissions.java
index febe400..1095839 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtFixturesRoleAndPermissions.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.commons.collections.Can;
@@ -24,16 +24,21 @@ import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 
 /**
- * Role to run in the prototype fixture scripts for the example webapp for the security module.
+ * Access to <code>isis.ext.fixtures</code> namespace
+ * ({@link org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts}
+ * and {@link org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult}.
  *
  * @since 2.0 {@index}
  */
-public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
+public class IsisExtFixturesRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
-    public IsisExtSecmanFixtureRoleAndPermissions(SecmanConfiguration configBean) {
-        super(configBean.getFixtureRoleName(), "Security module fixtures");
+    public static final String ROLE_NAME = IsisModuleTestingFixturesApplib.NAMESPACE.replace(",","-");
+
+    public IsisExtFixturesRoleAndPermissions() {
+        super(ROLE_NAME, String.format("Ability to run fixture scripts (access to the '%s' namespace)", IsisModuleTestingFixturesApplib.NAMESPACE));
     }
 
     @Override
@@ -42,7 +47,7 @@ public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermi
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
                 Can.ofSingleton(
-                        ApplicationFeatureId.newNamespace("isis.ext.secman")));
+                        ApplicationFeatureId.newNamespace(IsisModuleTestingFixturesApplib.NAMESPACE)));
 
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtH2ConsoleRoleAndPermissions.java
similarity index 68%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtH2ConsoleRoleAndPermissions.java
index febe400..991e0de 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisExtH2ConsoleRoleAndPermissions.java
@@ -16,24 +16,28 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 
 /**
- * Role to run in the prototype fixture scripts for the example webapp for the security module.
+ * Access to the h2 console UI.
  *
  * @since 2.0 {@index}
  */
-public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
+public class IsisExtH2ConsoleRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
-    public IsisExtSecmanFixtureRoleAndPermissions(SecmanConfiguration configBean) {
-        super(configBean.getFixtureRoleName(), "Security module fixtures");
+    private static final String SERVICE_OBJECT_TYPE = "isis.ext.h2Console";
+
+    public static final String ROLE_NAME = SERVICE_OBJECT_TYPE.replace(".","-");
+
+    public IsisExtH2ConsoleRoleAndPermissions() {
+        super(ROLE_NAME, String.format("Access to the H2 console UI", IsisModuleTestingFixturesApplib.NAMESPACE));
     }
 
     @Override
@@ -42,7 +46,7 @@ public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermi
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
                 Can.ofSingleton(
-                        ApplicationFeatureId.newNamespace("isis.ext.secman")));
+                        ApplicationFeatureId.newNamespace(IsisModuleTestingFixturesApplib.NAMESPACE)));
 
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisPersistenceJdoMetaModelRoleAndPermissions.java
similarity index 71%
copy from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
copy to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisPersistenceJdoMetaModelRoleAndPermissions.java
index 1e815f8..891d2d3 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisPersistenceJdoMetaModelRoleAndPermissions.java
@@ -16,25 +16,28 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 
 /**
+ * Provides access to download the JDO metamodel.
+ *
  * @since 2.0 {@index}
  */
-public class IsisExtFixturesFixtureResultsRoleAndPermissions
+public class IsisPersistenceJdoMetaModelRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
+    private static final String SERVICE_OBJECT_TYPE = "isis.persistence.jdo.JdoMetamodelMenu";
+
+    public static final String ROLE_NAME = SERVICE_OBJECT_TYPE.replace(".","-");
 
-    public IsisExtFixturesFixtureResultsRoleAndPermissions() {
-        super(ROLE_NAME, "Access results of running Fixture Scripts");
+    public IsisPersistenceJdoMetaModelRoleAndPermissions() {
+        super(ROLE_NAME, "Access to download the JDO metamodel");
     }
 
     @Override
@@ -42,7 +45,9 @@ extends AbstractRoleAndPermissionsFixtureScript {
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newType(FixtureResult.OBJECT_TYPE)));
+                Can.of(
+                        ApplicationFeatureId.newType(SERVICE_OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisSudoImpersonateRoleAndPermissions.java
similarity index 69%
rename from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
rename to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisSudoImpersonateRoleAndPermissions.java
index febe400..a47d7d9 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisSudoImpersonateRoleAndPermissions.java
@@ -16,24 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.user.ImpersonateMenu;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
 
 /**
- * Role to run in the prototype fixture scripts for the example webapp for the security module.
- *
  * @since 2.0 {@index}
  */
-public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
+public class IsisSudoImpersonateRoleAndPermissions
+extends AbstractRoleAndPermissionsFixtureScript {
+
+    public static final String ROLE_NAME = ImpersonateMenu.OBJECT_TYPE.replace(".","-");
 
-    public IsisExtSecmanFixtureRoleAndPermissions(SecmanConfiguration configBean) {
-        super(configBean.getFixtureRoleName(), "Security module fixtures");
+    public IsisSudoImpersonateRoleAndPermissions() {
+        super(ROLE_NAME, "Access to the ImpersonateMenu (ability to impersonate other users, for testing purposes)");
     }
 
     @Override
@@ -41,8 +42,9 @@ public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermi
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newNamespace("isis.ext.secman")));
-
+                Can.of(
+                        ApplicationFeatureId.newType(ImpersonateMenu.OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisViewerRestfulObjectsSwaggerRoleAndPermissions.java
similarity index 68%
rename from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
rename to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisViewerRestfulObjectsSwaggerRoleAndPermissions.java
index 1e815f8..0bf09b0 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisViewerRestfulObjectsSwaggerRoleAndPermissions.java
@@ -16,25 +16,29 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.other;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 
 /**
+ * Provides access to open up the Swagger UI.
+ *
  * @since 2.0 {@index}
  */
-public class IsisExtFixturesFixtureResultsRoleAndPermissions
+public class IsisViewerRestfulObjectsSwaggerRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
+    private static final String SERVICE_OBJECT_TYPE = "isis.viewer.restfulobjects.SwaggerServiceMenu";
+
+    public static final String ROLE_NAME = SERVICE_OBJECT_TYPE.replace(".","-");
 
-    public IsisExtFixturesFixtureResultsRoleAndPermissions() {
-        super(ROLE_NAME, "Access results of running Fixture Scripts");
+    public IsisViewerRestfulObjectsSwaggerRoleAndPermissions() {
+        super(ROLE_NAME, "Access to the swagger UI");
     }
 
     @Override
@@ -42,7 +46,9 @@ extends AbstractRoleAndPermissionsFixtureScript {
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofSingleton(
-                        ApplicationFeatureId.newType(FixtureResult.OBJECT_TYPE)));
+                Can.of(
+                        ApplicationFeatureId.newType(SERVICE_OBJECT_TYPE)
+                        )
+        );
     }
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/GlobalTenancy.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/GlobalTenancy.java
similarity index 95%
rename from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/GlobalTenancy.java
rename to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/GlobalTenancy.java
index d2d50e9..8abea59 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/GlobalTenancy.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/GlobalTenancy.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.secman;
 
 import org.apache.isis.extensions.secman.api.tenancy.fixtures.AbstractTenancyFixtureScript;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminRoleAndPermissions.java
similarity index 73%
rename from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
rename to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminRoleAndPermissions.java
index 5ea6906..691e659 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminRoleAndPermissions.java
@@ -16,7 +16,10 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.secman;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.commons.collections.Can;
@@ -27,16 +30,23 @@ import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissio
 import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
 
 /**
+ * Sets up the {@link SecmanConfiguration#getAdminRoleName() secman admin role}
+ * with its initial set of permissions (the union of
+ * {@link SecmanConfiguration#getAdminStickyNamespacePermissions()}
+ * and {@link SecmanConfiguration#getAdminAdditionalNamespacePermissions()}).
+ *
+ * @see SecmanConfiguration
+ *
  * @since 2.0 {@index}
  */
 public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
-    private String[] adminInitialPackagePermissions;
+    private final List<String> adminInitialPackagePermissions;
 
     public IsisExtSecmanAdminRoleAndPermissions(SecmanConfiguration configBean) {
         super(configBean.getAdminRoleName(), "Administer security");
         this.adminInitialPackagePermissions = configBean.streamAdminNamespacePermissions()
-                .collect(_Arrays.toArray(String.class));
+                .collect(Collectors.toList());
     }
 
     @Override
@@ -44,8 +54,8 @@ public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermiss
         newPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
-                Can.ofArray(adminInitialPackagePermissions)
-                    .map(ApplicationFeatureId::newNamespace));
+                Can.ofCollection(adminInitialPackagePermissions)
+                        .map(ApplicationFeatureId::newNamespace));
     }
 
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminUser.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminUser.java
similarity index 93%
rename from extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminUser.java
rename to extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminUser.java
index 0e9d152..c40ae15 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/IsisExtSecmanAdminUser.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanAdminUser.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.model.seed.scripts;
+package org.apache.isis.extensions.secman.model.seed.scripts.secman;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.secman.api.SecmanConfiguration;
@@ -24,6 +24,7 @@ import org.apache.isis.extensions.secman.api.user.dom.AccountType;
 import org.apache.isis.extensions.secman.api.user.fixtures.AbstractUserAndRolesFixtureScript;
 
 /**
+ * Sets up a user, as defined in
  * @since 2.0 {@index}
  */
 public class IsisExtSecmanAdminUser extends AbstractUserAndRolesFixtureScript {
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanRegularUserRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanRegularUserRoleAndPermissions.java
new file mode 100644
index 0000000..467006d
--- /dev/null
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/secman/IsisExtSecmanRegularUserRoleAndPermissions.java
@@ -0,0 +1,115 @@
+/*
+ *  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.extensions.secman.model.seed.scripts.secman;
+
+import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.layout.LayoutServiceMenu;
+import org.apache.isis.applib.services.user.RoleMemento;
+import org.apache.isis.applib.services.user.UserMemento;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.inspect.model.ActionNode;
+import org.apache.isis.core.metamodel.inspect.model.CollectionNode;
+import org.apache.isis.core.metamodel.inspect.model.FacetAttrNode;
+import org.apache.isis.core.metamodel.inspect.model.FacetGroupNode;
+import org.apache.isis.core.metamodel.inspect.model.FacetNode;
+import org.apache.isis.core.metamodel.inspect.model.ParameterNode;
+import org.apache.isis.core.metamodel.inspect.model.PropertyNode;
+import org.apache.isis.core.metamodel.inspect.model.TypeNode;
+import org.apache.isis.core.security.authentication.logout.LogoutMenu;
+import org.apache.isis.extensions.secman.api.SecmanConfiguration;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
+import org.apache.isis.extensions.secman.api.role.dom.ApplicationRole;
+import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
+import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
+import org.apache.isis.extensions.secman.api.user.menu.MeService;
+
+import lombok.val;
+
+/**
+ * Role for regular users of the security module, providing the ability to lookup their user account using the
+ * {@link MeService}, and for viewing and maintaining their user details.
+ *
+ * @since 2.0 {@index}
+ */
+public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
+
+    public IsisExtSecmanRegularUserRoleAndPermissions(SecmanConfiguration configBean) {
+        super(configBean.getRegularUserRoleName(), "Regular user of the security module");
+    }
+
+    @Override
+    protected void execute(ExecutionContext executionContext) {
+
+        val allowViewing = Can.of(
+                ApplicationFeatureId.newType(ApplicationUser.OBJECT_TYPE),
+                ApplicationFeatureId.newMember(ApplicationRole.OBJECT_TYPE, "name"),
+                ApplicationFeatureId.newMember(ApplicationRole.OBJECT_TYPE, "description"),
+                ApplicationFeatureId.newType(ActionNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(CollectionNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(FacetAttrNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(FacetGroupNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(FacetNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(ParameterNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(PropertyNode.OBJECT_TYPE),
+                ApplicationFeatureId.newType(TypeNode.OBJECT_TYPE)
+                );
+
+        val allowChanging = Can.of(
+                ApplicationFeatureId.newType(MeService.OBJECT_TYPE),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "updateName"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "updatePassword"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "updateEmailAddress"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "updatePhoneNumber"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "updateFaxNumber"),
+                ApplicationFeatureId.newType(LogoutMenu.OBJECT_TYPE),
+                ApplicationFeatureId.newType(UserMemento.OBJECT_TYPE),
+                ApplicationFeatureId.newType(RoleMemento.OBJECT_TYPE),
+                ApplicationFeatureId.newType(DomainObjectList.OBJECT_TYPE),
+                ApplicationFeatureId.newType(LayoutServiceMenu.OBJECT_TYPE)
+                );
+
+        val vetoViewing = Can.of(
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "filterPermissions"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "resetPassword"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "lock"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "unlock"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "addRole"),
+                ApplicationFeatureId.newMember(ApplicationUser.OBJECT_TYPE, "removeRoles")
+                );
+
+        newPermissions(
+                ApplicationPermissionRule.ALLOW,
+                ApplicationPermissionMode.VIEWING,
+                allowViewing);
+
+        newPermissions(
+                ApplicationPermissionRule.ALLOW,
+                ApplicationPermissionMode.CHANGING,
+                allowChanging);
+
+        newPermissions(
+                ApplicationPermissionRule.VETO,
+                ApplicationPermissionMode.VIEWING,
+                vetoViewing);
+
+    }
+
+}
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
index 487b971..39136b4 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java
@@ -63,24 +63,24 @@ import org.apache.isis.extensions.secman.api.role.dom.ApplicationRole;
     @Query(
             name = org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission "
+                    + "FROM " + ApplicationPermission.FQCN
                     + "WHERE role == :role"),
     @Query(
             name = org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_USER,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission "
+                    + "FROM " + ApplicationPermission.FQCN
                     + "WHERE (u.roles.contains(role) && u.username == :username) "
                     + "VARIABLES org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser u"),
     @Query(
             name = org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission "
+                    + "FROM " + ApplicationPermission.FQCN
                     + "WHERE featureSort == :featureSort "
                     + "   && featureFqn == :featureFqn"),
     @Query(
             name = org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_RULE_FEATURE_FQN,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission "
+                    + "FROM " + ApplicationPermission.FQCN
                     + "WHERE role == :role "
                     + "   && rule == :rule "
                     + "   && featureSort == :featureSort "
@@ -88,7 +88,7 @@ import org.apache.isis.extensions.secman.api.role.dom.ApplicationRole;
     @Query(
             name = org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_RULE_FEATURE,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission "
+                    + "FROM " + ApplicationPermission.FQCN
                     + "WHERE role == :role "
                     + "   && rule == :rule "
                     + "   && featureSort == :featureSort "),
@@ -99,7 +99,7 @@ import org.apache.isis.extensions.secman.api.role.dom.ApplicationRole;
             members = { "role", "featureSort", "featureFqn", "rule" })
 })
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationPermission"
+        objectType = ApplicationPermission.OBJECT_TYPE
 )
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_CHILD
@@ -107,7 +107,9 @@ import org.apache.isis.extensions.secman.api.role.dom.ApplicationRole;
 public class ApplicationPermission
     implements org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission {
 
-    @Inject private ApplicationFeatureRepository featureRepository;
+    protected final static String FQCN = "org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission";
+
+    @Inject ApplicationFeatureRepository featureRepository;
 
 
     // -- ROLE
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
index 89984b7..debf380 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
@@ -66,18 +66,17 @@ import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermissio
     @Query(
             name = org.apache.isis.extensions.secman.api.role.dom.ApplicationRole.NAMED_QUERY_FIND_BY_NAME,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole "
+                    + "FROM " + ApplicationRole.FQCN
                     + "WHERE name == :name"),
     @Query(
             name = org.apache.isis.extensions.secman.api.role.dom.ApplicationRole.NAMED_QUERY_FIND_BY_NAME_CONTAINING,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole "
+                    + "FROM " + ApplicationRole.FQCN
                     + "WHERE name.matches(:regex) ")
 })
 @DomainObject(
         bounding = Bounding.BOUNDED,
-        //		bounded = true,
-        objectType = "isis.ext.secman.ApplicationRole",
+        objectType = ApplicationRole.OBJECT_TYPE,
         autoCompleteRepository = ApplicationRoleRepository.class,
         autoCompleteAction = "findMatching"
         )
@@ -87,6 +86,8 @@ import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermissio
 public class ApplicationRole
     implements org.apache.isis.extensions.secman.api.role.dom.ApplicationRole {
 
+    protected final static String FQCN = "org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole";
+
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
 
 
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/tenancy/dom/ApplicationTenancy.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/tenancy/dom/ApplicationTenancy.java
index 83bdbb3..a14a8da 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/tenancy/dom/ApplicationTenancy.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/tenancy/dom/ApplicationTenancy.java
@@ -67,29 +67,30 @@ import org.apache.isis.commons.internal.base._Casts;
     @Query(
             name = org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancy.NAMED_QUERY_FIND_BY_PATH,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.tenancy.dom.ApplicationTenancy "
+                    + "FROM " + ApplicationTenancy.FQCN
                     + "WHERE path == :path"),
     @Query(
             name = org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancy.NAMED_QUERY_FIND_BY_NAME,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.tenancy.dom.ApplicationTenancy "
+                    + "FROM " + ApplicationTenancy.FQCN
                     + "WHERE name == :name"),
     @Query(
             name = org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancy.NAMED_QUERY_FIND_BY_NAME_OR_PATH_MATCHING,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.tenancy.dom.ApplicationTenancy "
+                    + "FROM " + ApplicationTenancy.FQCN
                     + "WHERE name.matches(:regex) || path.matches(:regex) ")})
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationTenancy",
+        objectType = ApplicationTenancy.OBJECT_TYPE,
         autoCompleteRepository = ApplicationTenancyRepository.class,
         autoCompleteAction = "findMatching"
-        )
+)
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_ROOT
         )
 public class ApplicationTenancy
     implements org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancy {
 
+    protected final static String FQCN = "org.apache.isis.extensions.secman.jdo.tenancy.dom.ApplicationTenancy";
 
     // -- NAME
 
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/user/dom/ApplicationUser.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/user/dom/ApplicationUser.java
index dd0400b..b3cb706 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/user/dom/ApplicationUser.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/user/dom/ApplicationUser.java
@@ -82,22 +82,22 @@ import lombok.val;
     @Query(
             name = org.apache.isis.extensions.secman.api.user.dom.ApplicationUser.NAMED_QUERY_FIND_BY_USERNAME,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser "
+                    + "FROM " + ApplicationUser.FQCN
                     + "WHERE username == :username"),
     @Query(
             name = org.apache.isis.extensions.secman.api.user.dom.ApplicationUser.NAMED_QUERY_FIND_BY_EMAIL_ADDRESS,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser "
+                    + "FROM " + ApplicationUser.FQCN
                     + "WHERE emailAddress == :emailAddress"),
     @Query(
             name = org.apache.isis.extensions.secman.api.user.dom.ApplicationUser.NAMED_QUERY_FIND_BY_ATPATH,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser "
+                    + "FROM " + ApplicationUser.FQCN
                     + "WHERE atPath == :atPath"),
     @Query(
             name = org.apache.isis.extensions.secman.api.user.dom.ApplicationUser.NAMED_QUERY_FIND,
             value = "SELECT "
-                    + "FROM org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser "
+                    + "FROM " + ApplicationUser.FQCN
                     + "WHERE username.matches(:regex)"
                     + " || familyName.matches(:regex)"
                     + " || givenName.matches(:regex)"
@@ -105,16 +105,18 @@ import lombok.val;
                     + " || emailAddress.matches(:regex)")
 })
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationUser",
+        objectType = ApplicationUser.OBJECT_TYPE,
         autoCompleteRepository = ApplicationUserRepository.class,
         autoCompleteAction = "findMatching"
-        )
+)
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_ROOT
-        )
+)
 public class ApplicationUser
     implements org.apache.isis.extensions.secman.api.user.dom.ApplicationUser {
 
+    protected final static String FQCN = "org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser";
+
     @Inject private ApplicationUserRepository applicationUserRepository;
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
     @Inject private UserService userService;
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
index a88be3f..5d1fc60 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java
@@ -96,7 +96,7 @@ import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPoin
 })
 @EntityListeners(JpaEntityInjectionPointResolver.class)
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationPermission"
+        objectType = ApplicationPermission.OBJECT_TYPE
 )
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_CHILD
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
index c739637..d350f6b 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
@@ -74,8 +74,7 @@ import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPoin
 @EntityListeners(JpaEntityInjectionPointResolver.class)
 @DomainObject(
         bounding = Bounding.BOUNDED,
-        //		bounded = true,
-        objectType = "isis.ext.secman.ApplicationRole",
+        objectType = ApplicationRole.OBJECT_TYPE,
         autoCompleteRepository = ApplicationRoleRepository.class,
         autoCompleteAction = "findMatching"
         )
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/tenancy/dom/ApplicationTenancy.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/tenancy/dom/ApplicationTenancy.java
index ccabd94..6c8ce87 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/tenancy/dom/ApplicationTenancy.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/tenancy/dom/ApplicationTenancy.java
@@ -71,7 +71,7 @@ import org.apache.isis.commons.internal.base._Casts;
                   + "    OR t.path LIKE :regex"),
 })
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationTenancy",
+        objectType = ApplicationTenancy.OBJECT_TYPE,
         autoCompleteRepository = ApplicationTenancyRepository.class,
         autoCompleteAction = "findMatching"
         )
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/user/dom/ApplicationUser.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/user/dom/ApplicationUser.java
index 5bc7999..b8319bf 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/user/dom/ApplicationUser.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/user/dom/ApplicationUser.java
@@ -99,7 +99,7 @@ import lombok.val;
 })
 @EntityListeners(JpaEntityInjectionPointResolver.class)
 @DomainObject(
-        objectType = "isis.ext.secman.ApplicationUser",
+        objectType = ApplicationUser.OBJECT_TYPE,
         autoCompleteRepository = ApplicationUserRepository.class,
         autoCompleteAction = "findMatching"
         )
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java
index 77282e7..bd391a9 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java
@@ -40,4 +40,6 @@ import org.apache.isis.persistence.jdo.metamodel.menu.JdoMetamodelMenu;
 })
 public class IsisModuleJdoMetamodel {
 
+    public static final String NAMESPACE = "isis.persistence.jdo";
+
 }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
index 48a103b..cb2c97e 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
@@ -34,18 +34,23 @@ import org.apache.isis.applib.util.ZipWriter;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import org.apache.isis.persistence.jdo.applib.services.JdoSupportService;
+import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel;
 import org.apache.isis.persistence.jdo.provider.entities.JdoFacetContext;
 
 import lombok.val;
 
-@Named("isis.persistence.jdo.JdoMetamodelMenu")
-@DomainService(objectType = "isis.persistence.jdo.JdoMetamodelMenu")
+@Named(JdoMetamodelMenu.OBJECT_TYPE)
+@DomainService(
+        objectType = JdoMetamodelMenu.OBJECT_TYPE
+)
 @DomainServiceLayout(
-        named = "Prototyping",
-        menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
+        menuBar = DomainServiceLayout.MenuBar.SECONDARY,
+        named = "Prototyping"
+)
 public class JdoMetamodelMenu {
 
+    public final static String OBJECT_TYPE = IsisModuleJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu";
+
     @Inject private JdoSupportService jdoSupport;
     @Inject private JdoFacetContext jdoFacetContext;
 
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
index f6c23e0..4ad1352 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
@@ -27,4 +27,7 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @ComponentScan
 public class IsisModuleSubdomainsExcelApplib {
+
+    public static final String NAMESPACE = "isis.sub.excel";
+
 }
diff --git a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
index 6ab72f8..4159a9f 100644
--- a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
+++ b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
@@ -40,6 +40,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.subdomains.excel.applib.IsisModuleSubdomainsExcelApplib;
 import org.apache.isis.subdomains.excel.applib.dom.ExcelService;
 import org.apache.isis.subdomains.excel.applib.dom.util.ExcelServiceImpl;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResultList;
@@ -57,10 +58,12 @@ import lombok.val;
  * @since 2.0 {@index}
  */
 @DomainObject(
-        objectType = "isis.sub.excel.ExcelFixture"
+        objectType = ExcelFixture.OBJECT_TYPE
 )
 public class ExcelFixture extends FixtureScript {
 
+    public final static String OBJECT_TYPE = IsisModuleSubdomainsExcelApplib.NAMESPACE + ".ExcelFixture";
+
     @Inject SpecificationLoader specLoader;
 
     private final List<Class<?>> classes;
diff --git a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture2.java b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture2.java
index c872766..f50457c 100644
--- a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture2.java
+++ b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture2.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.base._Bytes;
+import org.apache.isis.subdomains.excel.applib.IsisModuleSubdomainsExcelApplib;
 import org.apache.isis.subdomains.excel.applib.dom.ExcelService;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetSpec;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
@@ -45,10 +46,11 @@ import lombok.val;
  * @since 2.0 {@index}
  */
 @DomainObject(
-        objectType = "isis.sub.excel.ExcelFixture2"
+        objectType = ExcelFixture2.OBJECT_TYPE
 )
 public class ExcelFixture2 extends FixtureScript {
 
+    public final static String OBJECT_TYPE = IsisModuleSubdomainsExcelApplib.NAMESPACE + ".ExcelFixture2";
 
     /**
      * Input, optional: defines the name of the resource.
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
index 1ea1380..6ecf637 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
@@ -44,4 +44,5 @@ import org.apache.isis.testing.fixtures.applib.services.FixturesLifecycleService
 })
 public class IsisModuleTestingFixturesApplib {
 
+    public static final String NAMESPACE = "isis.ext.fixtures";
 }
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureResult.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureResult.java
index e76cb5c..123b3c6 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureResult.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureResult.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -56,7 +57,7 @@ import lombok.Setter;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class FixtureResult {
 
-    public static final String OBJECT_TYPE = "isis.ext.fixtures.FixtureResult"; // secman seeding
+    public static final String OBJECT_TYPE = IsisModuleTestingFixturesApplib.NAMESPACE + ".FixtureResult"; // secman seeding
 
     @PropertyLayout(named="Fixture script")
     @Property(optionality = Optionality.OPTIONAL)
@@ -92,4 +93,4 @@ public class FixtureResult {
     @XmlTransient @Inject BookmarkService bookmarkService;
 
 
-}
\ No newline at end of file
+}
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
index 28d1083..b3de029 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
@@ -52,6 +52,7 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.fixtures.applib.api.PersonaWithBuilderScript;
 import org.apache.isis.testing.fixtures.applib.events.FixturesInstalledEvent;
 import org.apache.isis.testing.fixtures.applib.events.FixturesInstallingEvent;
@@ -65,7 +66,7 @@ import lombok.val;
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.fixtures.FixtureScripts"
+        objectType = FixtureScripts.OBJECT_TYPE
 )
 @DomainServiceLayout(
         named="Prototyping",
@@ -73,6 +74,8 @@ import lombok.val;
 )
 public class FixtureScripts {
 
+    public static final String OBJECT_TYPE = IsisModuleTestingFixturesApplib.NAMESPACE + ".FixtureScripts"; // secman seeding
+
     //  @Inject private FactoryService factoryService;
     @Inject private TitleService titleService;
     @Inject private JaxbService jaxbService;
@@ -530,4 +533,4 @@ public class FixtureScripts {
 
 
 
-}
\ No newline at end of file
+}
diff --git a/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/IsisModuleTestingH2ConsoleUi.java b/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/IsisModuleTestingH2ConsoleUi.java
index 81fddf6..99d9eb0 100644
--- a/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/IsisModuleTestingH2ConsoleUi.java
+++ b/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/IsisModuleTestingH2ConsoleUi.java
@@ -37,4 +37,5 @@ import org.apache.isis.testing.h2console.ui.webmodule.WebModuleH2Console;
 })
 public class IsisModuleTestingH2ConsoleUi {
 
+    public static final String NAMESPACE = "isis.ext.h2Console";
 }
diff --git a/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/services/H2ManagerMenu.java b/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/services/H2ManagerMenu.java
index a264741..7857062 100644
--- a/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/services/H2ManagerMenu.java
+++ b/testing/h2console/ui/src/main/java/org/apache/isis/testing/h2console/ui/services/H2ManagerMenu.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.LocalResourcePath;
+import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
 import org.apache.isis.testing.h2console.ui.webmodule.WebModuleH2Console;
 
 /**
@@ -36,7 +37,7 @@ import org.apache.isis.testing.h2console.ui.webmodule.WebModuleH2Console;
  */
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.h2Console.H2ManagerMenu"
+        objectType = H2ManagerMenu.OBJECT_TYPE
         )
 @DomainServiceLayout(
         named = "Prototyping",
@@ -44,6 +45,8 @@ import org.apache.isis.testing.h2console.ui.webmodule.WebModuleH2Console;
         )
 public class H2ManagerMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleTestingH2ConsoleUi.NAMESPACE + ".H2ManagerMenu";
+
     private final WebModuleH2Console webModule;
 
     @Inject
diff --git a/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java b/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java
index 6f1ae42..8078f3b 100644
--- a/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java
+++ b/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java
@@ -34,4 +34,5 @@ import org.apache.isis.core.webapp.IsisModuleCoreWebapp;
 @ComponentScan
 public class IsisModuleExtHsqldbMgr {
 
+    public static final String NAMESPACE = "isis.ext.hsqldbMgr";
 }
diff --git a/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java b/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
index 42213ad..3745611 100644
--- a/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
+++ b/testing/hsqldbmgr/ui/src/main/java/org/apache/isis/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
@@ -34,6 +34,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.config.datasources.DataSourceIntrospectionService;
 import org.apache.isis.core.config.datasources.DataSourceIntrospectionService.DataSourceInfo;
+import org.apache.isis.extensions.hsqldbmgr.dom.IsisModuleExtHsqldbMgr;
 
 import lombok.extern.log4j.Log4j2;
 
@@ -42,7 +43,7 @@ import lombok.extern.log4j.Log4j2;
  */
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isis.ext.hsqldbMgr.HsqlDbManagerMenu"
+        objectType = HsqlDbManagerMenu.OBJECT_TYPE
         )
 @DomainServiceLayout(
         named = "Prototyping",
@@ -51,6 +52,8 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class HsqlDbManagerMenu {
 
+    public final static String OBJECT_TYPE = IsisModuleExtHsqldbMgr.NAMESPACE + ".HsqlDbManagerMenu";
+
     private final String url;
 
     @Inject
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
index 6dae583..69f16a7 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
@@ -42,10 +42,10 @@ import lombok.RequiredArgsConstructor;
         semantics = SemanticsOf.IDEMPOTENT,
         commandPublishing = Publishing.DISABLED,
         executionPublishing = Publishing.DISABLED,
-        associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         restrictTo = RestrictTo.PROTOTYPING
 )
 @ActionLayout(
+        associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         cssClassFa = "fa-mask",
         position = ActionLayout.Position.PANEL_DROPDOWN,
         redirectPolicy = Redirect.EVEN_IF_SAME,
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.java
index b8cc4ba..558d5d6 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.java
@@ -66,4 +66,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.service.swagger.internal.
 
 })
 public class IsisModuleRestfulObjectsRendering {
+
+    public static final String NAMESPACE = "isis.viewer.restfulobjects";
 }
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.java
index 34e8c5b..45eb29b 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.java
@@ -39,19 +39,22 @@ import org.apache.isis.applib.value.Clob;
 import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.config.RestEasyConfiguration;
+import org.apache.isis.viewer.restfulobjects.rendering.IsisModuleRestfulObjectsRendering;
 
 
 /**
  * @since 1.x {@index}
  */
-@Named("isis.applib.SwaggerServiceMenu")
-@DomainService(objectType = "isis.applib.SwaggerServiceMenu")
+@Named(SwaggerServiceMenu.OBJECT_TYPE)
+@DomainService(objectType = SwaggerServiceMenu.OBJECT_TYPE)
 @DomainServiceLayout(
         named = "Prototyping",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
 )
 public class SwaggerServiceMenu {
 
+    public static final String OBJECT_TYPE = IsisModuleRestfulObjectsRendering.NAMESPACE +  ".SwaggerServiceMenu";
+
     private final SwaggerService swaggerService;
     private final ServiceRegistry serviceRegistry;
     private final RestEasyConfiguration restEasyConfiguration;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
index 67db2a2..8e580a6 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
@@ -48,6 +48,12 @@ public class TaggerDefault implements Tagger {
         if (objType.startsWith("isis.applib.")) {
             return ". apache isis applib";
         }
+        if (objType.startsWith("isis.conf.")) {
+            return ". apache isis conf";
+        }
+        if (objType.startsWith("isis.sudo.")) {
+            return ". apache isis sudo";
+        }
         if (objType.startsWith("isis.persistence.")) {
             return ". apache isis persistence - " + partsOf(objType).skip(2).limit(1).collect(Collectors.joining("."));
         }
diff --git a/viewers/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerTest.java b/viewers/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerTest.java
index f1acc81..d95bbd8 100644
--- a/viewers/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerTest.java
+++ b/viewers/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/TaggerTest.java
@@ -60,10 +60,10 @@ public class TaggerTest {
 
         @Test
         public void applib() throws Exception {
-            String tag = new TaggerDefault().tagForObjectType("isis.applib.ConfigurationServiceMenu", null);
+            String tag = new TaggerDefault().tagForObjectType("isis.conf.ConfigurationServiceMenu", null);
             assertThat(tag, is(equalTo(". apache isis applib")));
         }
 
     }
 
-}
\ No newline at end of file
+}

[isis] 02/03: ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)

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

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

commit fcdf8b2ef0b3a28f1062268e79a8b6eb5f95b091
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 13 09:07:50 2021 +0100

    ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)
    
    rather than @Action(associateWith=)
---
 ...pplicationOrphanedPermissionManager_relocateSelected.java |  1 +
 .../api/role/dom/mixins/ApplicationRole_addPermission.java   | 12 ++----------
 .../role/dom/mixins/ApplicationRole_removePermissions.java   |  1 +
 .../api/role/dom/mixins/ApplicationRole_removeUsers.java     |  1 +
 .../api/user/dom/mixins/ApplicationUser_duplicate.java       |  4 ++--
 .../api/user/dom/mixins/ApplicationUser_removeRoles.java     |  1 +
 .../user/dom/mixins/ApplicationUser_updateAccountType.java   |  3 +--
 .../dom/mixins/perms/ApplicationUser_filterPermissions.java  |  5 ++---
 8 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
index 42a876f..6dee7fa 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
@@ -41,6 +41,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
+        choicesFrom = "orphanedPermissions",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
index e5bf577..e56fc7a 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
@@ -76,19 +76,11 @@ public class ApplicationRole_addPermission {
      * {@link ApplicationFeature feature}.
      */
     public ApplicationRole act(
-
-            @Parameter(optionality = Optionality.MANDATORY)
-            @ParameterLayout(named="Rule")
             final ApplicationPermissionRule rule,
-
-            @Parameter(optionality = Optionality.MANDATORY)
-            @ParameterLayout(named="Mode")
             final ApplicationPermissionMode mode,
-
-            @Parameter(optionality = Optionality.MANDATORY)
             @ParameterLayout(
-                    named = "Feature",
-                    describedAs = ApplicationFeatureChoices.DESCRIBED_AS)
+                    describedAs = ApplicationFeatureChoices.DESCRIBED_AS
+            )
             final ApplicationFeatureChoices.AppFeat feature) {
 
         applicationPermissionRepository.newPermission(target, rule, mode, feature.getFeatureId());
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
index d13c048..3f5cf06 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
@@ -41,6 +41,7 @@ import org.apache.isis.extensions.secman.api.role.dom.mixins.ApplicationRole_rem
 import lombok.RequiredArgsConstructor;
 
 @Action(
+        choicesFrom = "permissions",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
index d9ff159..b660d7e 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
@@ -38,6 +38,7 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
+        choicesFrom = "users",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
index 2e08142..5bc5543 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.extensions.secman.api.user.dom.mixins;
 
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
@@ -58,9 +59,8 @@ public class ApplicationUser_duplicate {
 
     @MemberSupport
     public ApplicationUser act(
-            @Parameter(optionality = Optionality.MANDATORY)
             final String username,
-            @Parameter(optionality = Optionality.OPTIONAL)
+            @Nullable
             final String emailAddress) {
 
         return applicationUserRepository
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
index e9f51e9..bd5bbff 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
@@ -38,6 +38,7 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_rem
 import lombok.RequiredArgsConstructor;
 
 @Action(
+        choicesFrom = "roles",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
index edcd85b..0f002c5 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
@@ -53,8 +53,7 @@ public class ApplicationUser_updateAccountType {
     private final ApplicationUser target;
 
     @MemberSupport
-    public ApplicationUser act(
-            final AccountType accountType) {
+    public ApplicationUser act(final AccountType accountType) {
         target.setAccountType(accountType);
         return target;
     }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
index d1d828d..cff2c5b 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
@@ -70,10 +70,9 @@ public class ApplicationUser_filterPermissions {
     @MemberSupport
     public List<UserPermissionViewModel> act(
 
-            @Parameter(optionality = Optionality.MANDATORY)
             @ParameterLayout(
-                    named = "Feature",
-                    describedAs = ApplicationFeatureChoices.DESCRIBED_AS)
+                    describedAs = ApplicationFeatureChoices.DESCRIBED_AS
+            )
             final ApplicationFeatureChoices.AppFeat feature) {
 
         val featureId = feature.getFeatureId();

[isis] 01/03: ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)

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

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

commit b7db0222bd312b4abd4be61bdd2d4065156bc351
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 13 09:05:40 2021 +0100

    ISIS-2619: updates secman to use @ActionLayout(associateWith=) and @Action(choicesFrom=)
    
    rather than @Action(associateWith=)
---
 .../ApplicationOrphanedPermissionManager_relocateSelected.java |  2 +-
 .../api/permission/dom/mixins/ApplicationPermission_allow.java |  2 +-
 .../permission/dom/mixins/ApplicationPermission_changing.java  |  2 +-
 .../permission/dom/mixins/ApplicationPermission_delete.java    |  2 +-
 .../dom/mixins/ApplicationPermission_updateRole.java           |  2 +-
 .../api/permission/dom/mixins/ApplicationPermission_veto.java  |  2 +-
 .../permission/dom/mixins/ApplicationPermission_viewing.java   |  2 +-
 .../api/role/dom/mixins/ApplicationRole_addPermission.java     |  2 +-
 .../secman/api/role/dom/mixins/ApplicationRole_addUser.java    |  2 +-
 .../secman/api/role/dom/mixins/ApplicationRole_delete.java     |  2 +-
 .../api/role/dom/mixins/ApplicationRole_removePermissions.java |  2 +-
 .../api/role/dom/mixins/ApplicationRole_removeUsers.java       |  2 +-
 .../api/role/dom/mixins/ApplicationRole_updateDescription.java |  2 +-
 .../secman/api/role/dom/mixins/ApplicationRole_updateName.java |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_addChild.java    |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_addUser.java     |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_delete.java      |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_removeChild.java |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_removeUser.java  |  2 +-
 .../api/tenancy/dom/mixins/ApplicationTenancy_updateName.java  |  2 +-
 .../app/mixins/ApplicationUserManager_newDelegateUser.java     |  9 +++++++--
 .../user/app/mixins/ApplicationUserManager_newLocalUser.java   |  9 +++++++--
 .../secman/api/user/contributions/HasUsername_open.java        | 10 ++++++----
 .../secman/api/user/dom/mixins/ApplicationUser_addRole.java    |  2 +-
 .../secman/api/user/dom/mixins/ApplicationUser_delete.java     |  2 +-
 .../secman/api/user/dom/mixins/ApplicationUser_duplicate.java  |  2 +-
 .../secman/api/user/dom/mixins/ApplicationUser_lock.java       |  4 ++--
 .../api/user/dom/mixins/ApplicationUser_removeRoles.java       |  5 +++--
 .../api/user/dom/mixins/ApplicationUser_resetPassword.java     |  2 +-
 .../secman/api/user/dom/mixins/ApplicationUser_unlock.java     |  4 ++--
 .../api/user/dom/mixins/ApplicationUser_updateAccountType.java |  2 +-
 .../api/user/dom/mixins/ApplicationUser_updateAtPath.java      |  2 +-
 .../user/dom/mixins/ApplicationUser_updateEmailAddress.java    |  2 +-
 .../api/user/dom/mixins/ApplicationUser_updateFaxNumber.java   |  2 +-
 .../secman/api/user/dom/mixins/ApplicationUser_updateName.java |  2 +-
 .../api/user/dom/mixins/ApplicationUser_updatePassword.java    |  2 +-
 .../api/user/dom/mixins/ApplicationUser_updatePhoneNumber.java |  2 +-
 .../api/user/dom/mixins/ApplicationUser_updateUsername.java    |  2 +-
 .../dom/mixins/perms/ApplicationUser_filterPermissions.java    |  7 +++++--
 39 files changed, 64 insertions(+), 48 deletions(-)

diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
index 561efd3..42a876f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/app/mixins/ApplicationOrphanedPermissionManager_relocateSelected.java
@@ -41,11 +41,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "orphanedPermissions",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
 @ActionLayout(
+        associateWith = "orphanedPermissions",
         describedAs = "For the selected permissions, relocates to the specified namespace"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_allow.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_allow.java
index 217bd95..d021e24 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_allow.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_allow.java
@@ -29,11 +29,11 @@ import org.apache.isis.extensions.secman.api.permission.dom.mixins.ApplicationPe
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "rule",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "rule",
         sequence = "1"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_changing.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_changing.java
index a2525ca..9e0e998 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_changing.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_changing.java
@@ -29,11 +29,11 @@ import org.apache.isis.extensions.secman.api.permission.dom.mixins.ApplicationPe
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "mode",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "mode",
         sequence = "2"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_delete.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_delete.java
index 3d38ec0..cd39f63 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_delete.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_delete.java
@@ -33,11 +33,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "role",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
 @ActionLayout(
+        associateWith = "role",
         position = ActionLayout.Position.PANEL,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_updateRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_updateRole.java
index 66069c3..6b2b085 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_updateRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_updateRole.java
@@ -36,11 +36,11 @@ import org.apache.isis.extensions.secman.api.role.dom.ApplicationRoleRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "role",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "role",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_veto.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_veto.java
index 9853827..a8faf24 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_veto.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_veto.java
@@ -29,11 +29,11 @@ import org.apache.isis.extensions.secman.api.permission.dom.mixins.ApplicationPe
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "rule",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "rule",
         sequence = "2"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_viewing.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_viewing.java
index ebec4fc..ca1f0fe 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_viewing.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_viewing.java
@@ -29,11 +29,11 @@ import org.apache.isis.extensions.secman.api.permission.dom.mixins.ApplicationPe
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "mode",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "mode",
         sequence = "1"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
index 794af06..e5bf577 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
@@ -44,11 +44,11 @@ import lombok.Value;
 import lombok.experimental.Accessors;
 
 @Action(
-        associateWith = "permissions",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.NON_IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "permissions",
 		named = "Add",
 		promptStyle = PromptStyle.DIALOG_MODAL,
 		sequence = "1"
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addUser.java
index a65f9ac..8afb2a5 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addUser.java
@@ -38,11 +38,11 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "users",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "users",
         named = "Add",
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_delete.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_delete.java
index 1881754..ccd1681 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_delete.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_delete.java
@@ -34,11 +34,11 @@ import org.apache.isis.extensions.secman.api.role.dom.mixins.ApplicationRole_del
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "name",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
 @ActionLayout(
+        associateWith = "name",
         position = ActionLayout.Position.PANEL,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
index fe7fcde..d13c048 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removePermissions.java
@@ -41,11 +41,11 @@ import org.apache.isis.extensions.secman.api.role.dom.mixins.ApplicationRole_rem
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "permissions",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "permissions",
 		named = "Remove",
 		promptStyle = PromptStyle.DIALOG_MODAL,
 		sequence = "2"
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
index 3c00b88..d9ff159 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_removeUsers.java
@@ -38,11 +38,11 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "users",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "users",
         named = "Remove",
         sequence = "2"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateDescription.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateDescription.java
index 498aa4e..b2aaf80 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateDescription.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateDescription.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.role.dom.mixins.ApplicationRole_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "description",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "description",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateName.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateName.java
index 4e6ee99..5201f08 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateName.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_updateName.java
@@ -29,11 +29,11 @@ import org.apache.isis.extensions.secman.api.role.dom.mixins.ApplicationRole_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "name",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "name",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addChild.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addChild.java
index b7dee84..bd4e95f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addChild.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addChild.java
@@ -32,11 +32,11 @@ import org.apache.isis.extensions.secman.api.tenancy.dom.mixins.ApplicationTenan
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "children",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "children",
         named = "Add",
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addUser.java
index d78be8e..a8dd896 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_addUser.java
@@ -38,11 +38,11 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "users",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "users",
         named = "Add",
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_delete.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_delete.java
index da41557..05e1c80 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_delete.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_delete.java
@@ -39,11 +39,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "name",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
 @ActionLayout(
+        associateWith = "name",
         position = ActionLayout.Position.PANEL,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeChild.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
index c85cb13..f3fbfcc 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
@@ -34,11 +34,11 @@ import org.apache.isis.extensions.secman.api.tenancy.dom.mixins.ApplicationTenan
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "children",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "children",
         named = "Remove",
         sequence = "2"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeUser.java
index cd22568..a4d1e07 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_removeUser.java
@@ -36,11 +36,11 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUserRepository;
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "users",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "users",
         named = "Remove",
         sequence = "2"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_updateName.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_updateName.java
index 203b32d..80a4618 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_updateName.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/dom/mixins/ApplicationTenancy_updateName.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.tenancy.dom.mixins.ApplicationTenan
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "name",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "name",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newDelegateUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newDelegateUser.java
index 44d93db..4fff829 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newDelegateUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newDelegateUser.java
@@ -21,6 +21,7 @@ package org.apache.isis.extensions.secman.api.user.app.mixins;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
@@ -42,8 +43,12 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        domainEvent = DomainEvent.class,
-        associateWith = "allUsers")
+        domainEvent = DomainEvent.class
+)
+@ActionLayout(
+        associateWith = "allUsers",
+        sequence = "1"
+)
 @RequiredArgsConstructor
 public class ApplicationUserManager_newDelegateUser {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newLocalUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newLocalUser.java
index 723c50a..0a12b9f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newLocalUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/app/mixins/ApplicationUserManager_newLocalUser.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
@@ -44,8 +45,12 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        domainEvent = DomainEvent.class,
-        associateWith = "allUsers")
+        domainEvent = DomainEvent.class
+)
+@ActionLayout(
+        associateWith = "allUsers",
+        sequence = "1"
+)
 @RequiredArgsConstructor
 public class ApplicationUserManager_newLocalUser
 extends ApplicationUserManager_newLocalUserAbstract {
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/contributions/HasUsername_open.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/contributions/HasUsername_open.java
index eacbe6b..5f65b10 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/contributions/HasUsername_open.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/contributions/HasUsername_open.java
@@ -33,10 +33,12 @@ import lombok.RequiredArgsConstructor;
 
 @Action(
         semantics = SemanticsOf.SAFE,
-        domainEvent = HasUsername_open.ActionDomainEvent.class,
-        associateWith = "User" // associate with a 'User' property (if any)
-        )
-@ActionLayout(sequence = "1")
+        domainEvent = HasUsername_open.ActionDomainEvent.class
+)
+@ActionLayout(
+        associateWith = "user", // associate with a 'User' property (if any)
+        sequence = "1"
+)
 @RequiredArgsConstructor
 public class HasUsername_open {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_addRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_addRole.java
index e2aebb9..cd90b87 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_addRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_addRole.java
@@ -36,11 +36,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "roles",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "roles",
         named="Add",
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_delete.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_delete.java
index f0d9105..f9932dd 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_delete.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_delete.java
@@ -35,11 +35,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_del
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "username",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
 )
 @ActionLayout(
+        associateWith = "username",
         position = ActionLayout.Position.PANEL,
         sequence = "2"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
index 1f98ce3..2e08142 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_duplicate.java
@@ -37,11 +37,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_dup
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "username",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.NON_IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "username",
         position = ActionLayout.Position.PANEL,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_lock.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_lock.java
index 426a4fe..a8e1781 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_lock.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_lock.java
@@ -34,12 +34,12 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_loc
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "status",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
-        named="Disable",
+        associateWith = "status",
+        cssClassFa = "fa-lock",
         sequence = "2"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
index 28b3fb9..e9f51e9 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_removeRoles.java
@@ -38,12 +38,13 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_rem
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "roles",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
-        named="Remove", sequence = "2"
+        associateWith = "roles",
+        named="Remove",
+        sequence = "2"
 )
 @RequiredArgsConstructor
 public class ApplicationUser_removeRoles {
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_resetPassword.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_resetPassword.java
index 03c3277..26a0c15 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_resetPassword.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_resetPassword.java
@@ -35,11 +35,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_res
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "hasPassword",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "hasPassword",
         sequence = "20"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_unlock.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_unlock.java
index 000e6da..5cb2b4f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_unlock.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_unlock.java
@@ -30,12 +30,12 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_unl
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "status",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
-        named="Enable", // symmetry with lock (disable)
+        associateWith = "status",
+        named = "fa-lock-open",
         sequence = "1"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
index 6ce99ec..edcd85b 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAccountType.java
@@ -34,11 +34,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "accountType",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "accountType",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAtPath.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAtPath.java
index 50cea68..9cd2032 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAtPath.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateAtPath.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "atPath",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "atPath",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateEmailAddress.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateEmailAddress.java
index 74449ab..071333d 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateEmailAddress.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateEmailAddress.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "emailAddress",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "emailAddress",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateFaxNumber.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateFaxNumber.java
index 60e4953..bd8f4b7 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateFaxNumber.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateFaxNumber.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "faxNumber",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "faxNumber",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateName.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateName.java
index 347a4bf..8a5efd6 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateName.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateName.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "familyName",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "familyName",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePassword.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePassword.java
index 55df991..5bc3c1f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePassword.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePassword.java
@@ -39,11 +39,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "hasPassword",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "hasPassword",
         sequence = "10"
 )
 @RequiredArgsConstructor
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePhoneNumber.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePhoneNumber.java
index e8f8f8a..be088da 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePhoneNumber.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updatePhoneNumber.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "phoneNumber",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "phoneNumber",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateUsername.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateUsername.java
index 2b68ad2..1dc6f3e 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateUsername.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/ApplicationUser_updateUsername.java
@@ -30,11 +30,11 @@ import org.apache.isis.extensions.secman.api.user.dom.mixins.ApplicationUser_upd
 import lombok.RequiredArgsConstructor;
 
 @Action(
-        associateWith = "username",
         domainEvent = DomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT
 )
 @ActionLayout(
+        associateWith = "username",
         promptStyle = PromptStyle.INLINE_AS_IF_EDIT,
         sequence = "1"
 )
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
index 12f826d..d1d828d 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
@@ -47,11 +47,14 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Action(
-        associateWith = "permissions",
         domainEvent = ApplicationUser_filterPermissions.DomainEvent.class,
         semantics = SemanticsOf.SAFE
 )
-@ActionLayout(sequence = "1", promptStyle = PromptStyle.DIALOG_MODAL)
+@ActionLayout(
+        associateWith = "permissions",
+        promptStyle = PromptStyle.DIALOG_MODAL,
+        sequence = "1"
+)
 @RequiredArgsConstructor
 public class ApplicationUser_filterPermissions {