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 2018/09/16 09:45:21 UTC

[isis] branch ISIS-1976-squash created (now fc08e73)

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

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


      at fc08e73  ISIS-1976: removes OA map, stream for metamodel, excising guava

This branch includes the following new commits:

     new fc08e73  ISIS-1976: removes OA map, stream for metamodel, excising guava

The 1 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.



[isis] 01/01: ISIS-1976: removes OA map, stream for metamodel, excising guava

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

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

commit fc08e7366701c4466269a978f318f8ad23506b23
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Sep 16 10:33:51 2018 +0100

    ISIS-1976: removes OA map, stream for metamodel, excising guava
    
    Key achievements:
    
    Metamodel: almost all guava Function and Predicate idioms removed
    Metamodel: slight API improvements, such that some of the internal meta-data that is kept in Java
    Collections is no longer copied into immutable lists for any calling client, instead Java Streams are returned (which treat the underlying collections un-modifiable by design)
    the ObjectAdapter per-session map/cache is history
    the legacy modules have been removed, for convenince and ease of migration the legacy/transition-1-2- module remains and shall provide legacy glue code
    shiro was moved to plugins, and its artifact renamed, to be inline with the other plugins
---
 .../org/apache/isis/applib/adapters/Parser.java    |  10 +-
 .../org/apache/isis/applib/adapters/Parser2.java   |  29 -
 .../appfeat/ApplicationFeatureRepository.java      |  12 +-
 .../applib/services/bookmark/BookmarkService.java  |   2 +-
 .../java/org/apache/isis/applib/util/ToString.java |  42 +-
 .../jaxbadapters/PersistentEntitiesAdapter.java    |   2 +-
 .../jaxbadapters/PersistentEntityAdapter.java      |   2 +-
 .../isis/commons/internal/base/_NullSafe.java      |   5 +-
 .../_Predicates.java => base/_Tuples.java}         |  45 +-
 .../isis/commons/internal/collections/_Lists.java  |  20 +
 .../commons/internal/functions/_Predicates.java    |  17 +
 core/legacy/applib-legacy/.gitignore               |   1 -
 .../apache/isis/applib/DomainObjectContainer.java  | 184 ------
 .../apache/isis/applib/annotation/Encodable.java   |  86 ---
 .../isis/applib/annotation/MemberGroupLayout.java  | 185 ------
 .../apache/isis/applib/annotation/Parseable.java   |  77 ---
 .../isis/applib/fixtures/AbstractFixture.java      | 184 ------
 .../isis/applib/fixtures/AbstractFixtureSusa.java  |  64 --
 .../apache/isis/applib/fixtures/BaseFixture.java   | 125 ----
 .../apache/isis/applib/fixtures/DateFixture.java   | 126 ----
 .../isis/applib/fixtures/SwitchUserFixture.java    | 108 ----
 .../fixtures/switchuser/SwitchUserService.java     |  59 --
 .../switchuser/SwitchUserServiceAware.java         |  37 --
 .../applib/fixtures/switchuser/package-info.java   |  28 -
 .../java/org/apache/isis/applib/layout/Util.java   |  51 --
 .../component/CollectionLayoutData_legacy.java     |  40 --
 .../background/BackgroundCommandService2.java      |  28 -
 .../services/background/BackgroundService2.java    |  28 -
 .../ExceptionRecognizerAbstractLegacy.java         | 178 ------
 .../ExceptionRecognizerForTypeLegacy.java          | 148 -----
 .../applib/services/memento/MementoService.java    | 118 ----
 .../isis/applib/services/memento/package-info.java |  29 -
 .../repository/RepositoryServiceLegacy.java        | 233 -------
 ...aseEncodingWithSupportForLargeUrlsAbstract.java |  87 ---
 .../java/org/apache/isis/applib/util/Clause.java   | 125 ----
 .../isis/applib/util/ObjectContractsLegacy.java    | 286 ---------
 .../java/org/apache/isis/applib/value/Date.java    | 297 ---------
 .../org/apache/isis/applib/value/DateTime.java     | 314 ----------
 .../java/org/apache/isis/applib/value/Time.java    | 263 --------
 .../org/apache/isis/applib/value/TimeStamp.java    |  79 ---
 .../MemberGroupLayoutColumnSpansTest.java          |  41 --
 .../ExceptionRecognizerForTypeLegacyTest.java      |  78 ---
 .../ExceptionRecognizerGeneralLegacyTest.java      |  67 --
 .../java/org/apache/isis/applib/util/Invoice.java  |  38 --
 .../org/apache/isis/applib/util/InvoiceItem.java   |  73 ---
 .../apache/isis/applib/util/NumberedEvaluator.java |  32 -
 .../util/ObjectContractsLegacyTest_compareTo.java  |  77 ---
 .../util/ObjectContractsLegacyTest_equals.java     |  91 ---
 ...ectContractsLegacyTest_equals_and_hashCode.java | 124 ----
 .../util/ObjectContractsLegacyTest_toString.java   | 132 ----
 .../org/apache/isis/applib/value/DateTest.java     | 179 ------
 .../org/apache/isis/applib/value/DateTimeTest.java | 186 ------
 .../apache/isis/applib/value/TimeStampTest.java    |  61 --
 .../org/apache/isis/applib/value/TimeTest.java     | 127 ----
 .../integtestsupport/IntegrationTestAbstract.java  | 280 ---------
 .../integtestsupport/IntegrationTestAbstract2.java | 127 ----
 .../core/integtestsupport/IsisSystemForTest.java   | 687 ---------------------
 .../scenarios/ScenarioExecutionForIntegration.java | 114 ----
 core/legacy/integtestsupport-legacy/test.data      |   5 -
 core/legacy/metamodel-legacy/.gitignore            |   1 -
 .../annotcfg/EncodableFacetAnnotation.java         |  58 --
 ...bleFacetAnnotationElseConfigurationFactory.java |  79 ---
 .../membergroups/MemberGroupLayoutFacet.java       |  47 --
 .../MemberGroupLayoutFacetAbstract.java            |  82 ---
 .../MemberGroupLayoutFacetAnnotation.java          |  38 --
 .../annotprop/MemberGroupLayoutFacetFactory.java   | 123 ----
 .../annotprop/MemberGroupLayoutFacetFallback.java  |  38 --
 .../MemberGroupLayoutFacetProperties.java          |  71 ---
 .../annotcfg/ParseableFacetAnnotation.java         |  67 --
 ...bleFacetAnnotationElseConfigurationFactory.java |  84 ---
 ...ateValueFacetUsingSemanticsProviderFactory.java |  45 --
 .../value/date/DateValueSemanticsProvider.java     |  68 --
 ...imeValueFacetUsingSemanticsProviderFactory.java |  45 --
 .../datetime/DateTimeValueSemanticsProvider.java   |  69 ---
 ...imeValueFacetUsingSemanticsProviderFactory.java |  45 --
 .../value/time/TimeValueSemanticsProvider.java     |  88 ---
 ...ampValueFacetUsingSemanticsProviderFactory.java |  45 --
 .../timestamp/TimeStampValueSemanticsProvider.java |  85 ---
 .../TimeStampValueSemanticsProviderAbstract.java   | 105 ----
 .../container/DomainObjectContainerDefault.java    | 240 -------
 .../services/grid/fixedcols/applib/Hint.java       |  40 --
 .../RepositoryServiceLegacyInternalDefault.java    | 263 --------
 .../plugins/IsisTimeValuePropertyPlugin.java       |  34 -
 .../core/metamodel/spec/ObjectSpecifications.java  |  84 ---
 .../plugins/ProgrammingModelLegacyPlugin.java      |  46 --
 ...core.metamodel.progmodel.ProgrammingModelPlugin |   1 -
 ...l.services.swagger.internal.ValuePropertyPlugin |   1 -
 .../encodable/EncodableFacetFactoryTest.java       | 209 -------
 .../MemberGroupLayoutFacetFactoryTest.java         | 110 ----
 ...oupLayoutFacetPropertiesTest_asColumnSpans.java |  69 ---
 ...GroupLayoutFacetPropertiesTest_asGroupList.java |  75 ---
 ...acetAnnotationElseConfigurationFactoryTest.java | 218 -------
 .../value/DateTimeValueSemanticsProviderTest.java  | 146 -----
 .../value/DateValueSemanticsProviderTest.java      | 154 -----
 ...JavaSqlTimeStampValueSemanticsProviderTest.java |  79 ---
 .../value/TimeStampValueSemanticsProviderTest.java |  78 ---
 .../value/TimeValueSemanticsProviderTest.java      | 123 ----
 .../metamodel/spec/ObjectSpecificationsTest.java   |  82 ---
 core/legacy/runtime-legacy/.gitignore              |   1 -
 .../runtime/fixtures/SwitchUserServiceImpl.java    |  88 ---
 .../core/runtime/services/memento/Dom4jUtil.java   | 278 ---------
 .../services/memento/MementoServiceDefault.java    | 172 ------
 .../memento/MementoServiceDefaultTest.java         |  99 ---
 .../spec/feature/ObjectAssociationFilters.java     | 256 --------
 core/legacy/unittestsupport-legacy/.gitignore      |   1 -
 .../jmocking/JavassistImposteriser.java            | 136 ----
 .../jmocking/JavassistImposteriserTest.java        | 317 ----------
 core/legacy/viewer-wicket-ui-legacy/.gitignore     |   1 -
 .../isisapplib/ApplibDateConverterPlugin.java      |  42 --
 .../isisapplib/DateConverterForApplibDate.java     |  54 --
 .../isisapplib/DateConverterForApplibDateTime.java |  50 --
 .../scalars/isisapplib/IsisDatePanel.java          |  42 --
 .../scalars/isisapplib/IsisDatePanelFactory.java   |  44 --
 .../scalars/isisapplib/IsisDateTimePanel.java      |  51 --
 .../isisapplib/IsisDateTimePanelFactory.java       |  44 --
 .../scalars/isisapplib/IsisTimePanelFactory.java   |  44 --
 .../scalars/isisapplib/IsisTimeStampPanel.java     |  43 --
 .../isisapplib/IsisTimeStampPanelFactory.java      |  44 --
 ...g.apache.isis.viewer.wicket.ui.ComponentFactory |   4 -
 ...icket.ui.components.scalars.DateConverterPlugin |   1 -
 .../isisapplib/DateConverterForApplibDateTest.java |  88 ---
 .../DateConverterForApplibDateTimeTest.java        | 110 ----
 core/mavendeps/webapp/pom.xml                      |   7 +-
 .../AuthenticationSessionAbstract.java             |   4 +-
 .../core/commons/authentication/MessageBroker.java |   6 +-
 .../core/commons/components/InstallerAbstract.java |  15 +-
 .../commons/config/IsisConfigurationDefault.java   |   4 +-
 .../configbuilder/IsisConfigurationBuilder.java    |   9 +-
 .../PrimerForEnvironmentVariableISIS_OPTS.java     |   5 +-
 .../isis/core/commons/encoding/FieldType.java      |   3 +-
 .../apache/isis/core/commons/ensure/Assert.java    |  10 +-
 .../isis/core/commons/lang/ArrayExtensions.java    |   9 +-
 .../isis/core/commons/lang/ClassFunctions.java     |   4 +-
 .../isis/core/commons/lang/ClassPredicates.java    |   4 +-
 .../apache/isis/core/commons/lang/ClassUtil.java   |   4 +-
 .../isis/core/commons/lang/ListExtensions.java     |  19 +-
 .../commons/lang/MethodInvocationPreprocessor.java |  31 +-
 .../apache/isis/core/commons/lang/MethodUtil.java  |   7 +-
 .../isis/core/commons/lang/StringExtensions.java   |   4 +-
 .../isis/core/commons/lang/StringFunctions.java    |  59 --
 .../isis/core/commons/lang/StringPredicates.java   |  41 --
 .../isis/core/commons/matchers/package-info.java   |  24 -
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 129 ++--
 .../adapter/ObjectAdapterByIdProvider.java         |  86 +++
 .../metamodel/adapter/ObjectAdapterProvider.java   |  74 ++-
 .../isis/core/metamodel/adapter/oid/Oid.java       |  19 +-
 .../core/metamodel/adapter/oid/OidMarshaller.java  |   4 +-
 .../adapter/oid/ParentedCollectionOid.java         |  21 +-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  64 +-
 .../isis/core/metamodel/adapter/oid/TypedOid.java  |  30 -
 .../adapter/version/ConcurrencyException.java      |   1 -
 .../core/metamodel/facetapi/FacetAbstract.java     |  11 +-
 .../isis/core/metamodel/facetapi/FacetHolder.java  |  22 +-
 .../core/metamodel/facetapi/FacetHolderImpl.java   |  35 +-
 .../isis/core/metamodel/facetapi/FacetUtil.java    | 102 +--
 .../core/metamodel/facetapi/MultiTypedFacet.java   |   4 +-
 .../isis/core/metamodel/facets/Annotations.java    |  15 +-
 .../core/metamodel/facets/CollectionUtils.java     |   3 +-
 .../facets/ContributeeMemberFacetFactory.java      |   2 -
 .../core/metamodel/facets/DomainEventHelper.java   |  24 +-
 .../isis/core/metamodel/facets/FacetedMethod.java  |   5 +-
 .../core/metamodel/facets/ImperativeFacet.java     |  30 +-
 .../MethodPrefixBasedFacetFactoryAbstract.java     |  22 +-
 .../metamodel/facets/MultiTypedFacetAbstract.java  |  57 --
 ...nChoicesForCollectionParameterFacetFactory.java |  17 +-
 .../invocation/ActionDomainEventFacetAbstract.java |  29 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |  43 +-
 .../method/ActionDefaultsFacetViaMethod.java       |   5 +-
 .../ActionDefaultsFacetViaMethodFactory.java       |   2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |  33 +-
 .../CssClassFacetForActionLayoutAnnotation.java    |   1 +
 .../DescribedAsFacetForActionLayoutAnnotation.java |   1 +
 .../NamedFacetForActionLayoutAnnotation.java       |   1 +
 ...dFacetDerivedFromDomainServiceFacetFactory.java |   1 +
 ...uFacetDerivedFromDomainServiceFacetFactory.java |   2 +-
 .../ActionParameterValidationFacetViaMethod.java   |   1 +
 .../ActionValidationFacetViaMethodFactory.java     |   1 +
 .../collections/CollectionFacetAbstract.java       |   2 +-
 .../modify/CollectionDomainEventFacetAbstract.java |   6 +-
 ...abledFacetOnCollectionDerivedFromImmutable.java |   2 +-
 ...CssClassFacetForCollectionLayoutAnnotation.java |   1 +
 ...cribedAsFacetForCollectionLayoutAnnotation.java |   1 +
 .../NamedFacetForCollectionLayoutAnnotation.java   |   1 +
 .../collections/modify/CollectionFacetUtils.java   |   1 +
 .../ParentedFacetSinceCollectionFactory.java       |   2 +-
 .../annotation/SortedByFacetAnnotationFactory.java |  10 +-
 .../facets/fallback/FallbackFacetFactory.java      |  16 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |  24 +-
 ...CssClassFaFacetOnMemberFromConfiguredRegex.java |   2 +-
 .../CssClassFaFacetOnMemberFromProperties.java     |   2 +-
 .../DisableForSessionFacetViaMethodFactory.java    |   1 +
 .../method/DisableForContextFacetViaMethod.java    |   6 +-
 .../facets/members/hidden/HiddenFacetAbstract.java |  20 +-
 .../HiddenFacetFromLayoutPropertiesAbstract.java   |   1 +
 .../HideForSessionFacetViaMethodFactory.java       |   2 +-
 .../method/HideForContextFacetViaMethod.java       |   4 +-
 .../HideForContextFacetViaMethodFactory.java       |   2 +-
 .../members/order/MemberOrderFacetAbstract.java    |   1 +
 .../BookmarkPolicyFacetFallbackFactory.java        |  20 +-
 .../facets/object/callbacks/CallbackFacet.java     |   6 +-
 .../object/callbacks/CallbackFacetAbstract.java    |   7 +-
 .../callbacks/CreatedCallbackFacetFactory.java     |   2 +-
 .../callbacks/CreatedCallbackFacetViaMethod.java   |   3 +-
 .../object/callbacks/LoadCallbackFacetFactory.java |   2 +-
 .../callbacks/LoadedCallbackFacetAbstract.java     |   2 -
 .../callbacks/LoadedCallbackFacetViaMethod.java    |   3 +-
 .../callbacks/LoadingCallbackFacetAbstract.java    |   2 -
 .../callbacks/LoadingCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/PersistCallbackFacetFactory.java     |   2 +-
 .../PersistCallbackViaSaveMethodFacetFactory.java  |   2 +-
 .../callbacks/PersistedCallbackFacetAbstract.java  |   2 -
 .../callbacks/PersistedCallbackFacetViaMethod.java |   3 +-
 .../callbacks/PersistingCallbackFacetAbstract.java |   2 -
 .../PersistingCallbackFacetViaMethod.java          |   3 +-
 .../callbacks/RemoveCallbackFacetFactory.java      |   2 +-
 .../RemoveCallbackViaDeleteMethodFacetFactory.java |   2 +-
 .../callbacks/RemovedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/RemovingCallbackFacetAbstract.java   |   2 -
 .../callbacks/RemovingCallbackFacetViaMethod.java  |   3 +-
 .../callbacks/UpdateCallbackFacetFactory.java      |   2 +-
 .../callbacks/UpdatedCallbackFacetAbstract.java    |   2 -
 .../callbacks/UpdatedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/UpdatingCallbackFacetAbstract.java   |   2 -
 .../callbacks/UpdatingCallbackFacetViaMethod.java  |  11 +-
 .../choices/enums/EnumValueSemanticsProvider.java  |   2 +-
 .../cssclass/method/CssClassFacetMethod.java       |   1 +
 .../method/CssClassFacetMethodFactory.java         |   1 +
 .../object/defaults/DefaultsProviderUtil.java      |   1 -
 .../annotcfg/DefaultedFacetAnnotation.java         |   2 +-
 .../annotcfg/DefaultedFacetFromConfiguration.java  |   2 +-
 ...AutoCompleteFacetForAutoCompleteAnnotation.java |   1 -
 ...ObjectSpecIdFacetForDomainObjectAnnotation.java |   1 +
 ...cIdFacetForJdoPersistenceCapableAnnotation.java |   2 +
 ...scribedAsFacetForViewModelLayoutAnnotation.java |   1 +
 .../NamedFacetForDomainObjectLayoutAnnotation.java |   1 +
 .../NamedFacetForViewModelLayoutAnnotation.java    |   2 -
 .../PluralFacetForViewModelLayoutAnnotation.java   |   1 +
 .../DomainServiceFacetAnnotationFactory.java       |  19 +-
 ...NamedFacetForDomainServiceLayoutAnnotation.java |   1 +
 .../object/encodeable/EncoderDecoderUtil.java      |   1 -
 .../facets/object/facets/FacetsFacetAbstract.java  |   1 -
 .../hidden/method/HiddenObjectFacetViaMethod.java  |   2 +-
 .../method/HiddenObjectFacetViaMethodFactory.java  |   4 +-
 .../object/icon/method/IconFacetMethodFactory.java |   2 +-
 ...oveDatanucleusPersistableTypesFacetFactory.java |   5 +-
 .../ignore/javalang/RemoveMethodsFacetFactory.java |  16 +-
 .../jdo/RemoveJdoEnhancementTypesFacetFactory.java |   5 +-
 .../method/NavigableParentFacetMethodFactory.java  |   2 +-
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |  11 +-
 ...erivedFromDomainServiceAnnotationElseGetId.java |   2 -
 .../ObjectValidPropertiesFacet.java                |   1 -
 .../impl/ObjectValidPropertiesFacetImpl.java       |  19 +-
 .../facets/object/parseable/ParserUtil.java        |   1 +
 ...tyDerivedFromRecreatableObjectFacetFactory.java |   1 +
 ...ObjectFacetDeclarativeInitializingAbstract.java |  35 +-
 .../annotation/TitleAnnotationFacetFactory.java    |   7 +-
 .../annotation/TitleFacetViaTitleAnnotation.java   |  11 +-
 .../title/methods/TitleFacetViaMethodsFactory.java |   4 +-
 ...cationFromMustSatisfyAnnotationOnTypeFacet.java |   2 +-
 .../method/ValidateObjectFacetMethodFactory.java   |   2 +-
 .../facets/object/value/EqualByContentFacet.java   |   1 -
 ...Parser2.java => MaxLengthFacetUsingParser.java} |   8 +-
 .../facets/object/value/ValueFacetAbstract.java    |  26 +-
 .../value/annotcfg/ValueFacetAnnotation.java       |   1 -
 ...ValueFacetAnnotationOrConfigurationFactory.java |   1 -
 .../annotcfg/ValueFacetFromConfiguration.java      |   2 -
 .../ValueFacetUsingSemanticsProviderFactory.java   |   1 -
 .../ValueSemanticsProviderAndFacetAbstract.java    |   9 +-
 .../objectvalue/maxlen/MaxLengthFacetAbstract.java |   3 +-
 .../MustSatisfySpecificationFacetAbstract.java     |   5 +-
 .../method/ActionChoicesFacetViaMethod.java        |   4 +-
 .../ActionParameterChoicesFacetViaMethod.java      |   2 +-
 ...ctionParameterChoicesFacetViaMethodFactory.java |   1 -
 .../ActionParameterDefaultsFacetAbstract.java      |   1 -
 ...arameterDefaultFacetDerivedFromTypeFactory.java |   2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |   4 +-
 .../CssClassFacetForParameterLayoutAnnotation.java |   1 +
 ...scribedAsFacetForParameterLayoutAnnotation.java |   1 +
 .../NamedFacetForParameterLayoutAnnotation.java    |   1 -
 .../PropertyOrCollectionAccessorFacetAbstract.java |   7 -
 .../PropertyAutoCompleteFacetAbstract.java         |   1 -
 .../defaults/PropertyDefaultFacetAbstract.java     |   1 -
 .../hidden/HiddenFacetForPropertyAnnotation.java   |   2 -
 .../modify/PropertyDomainEventFacetAbstract.java   |   6 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |  14 +-
 .../regex/RegExFacetForPropertyAnnotation.java     |   2 +
 .../CssClassFacetForPropertyLayoutAnnotation.java  |   1 +
 ...escribedAsFacetForPropertyLayoutAnnotation.java |   1 +
 .../update/PropertySetAndClearFacetFactory.java    |   1 +
 .../core/metamodel/facets/value/JodaFunctions.java |   3 +-
 .../ValueSemanticsProviderAbstractTemporal.java    |   2 +-
 .../value/bigdecimal/BigDecimalValueFacet.java     |   6 +-
 .../bigdecimal/BigDecimalValueFacetAbstract.java   |   5 -
 .../BigDecimalValueSemanticsProvider.java          |   9 +-
 .../BigIntegerValueSemanticsProvider.java          |   2 +-
 .../value/blobs/BlobValueSemanticsProvider.java    |   2 +-
 .../BooleanWrapperValueSemanticsProvider.java      |   1 -
 .../value/clobs/ClobValueSemanticsProvider.java    |   2 +-
 .../value/color/ColorValueSemanticsProvider.java   |   2 +-
 .../value/datejdk8local/Jdk8LocalDateUtil.java     |   3 +-
 .../Jdk8LocalDateValueSemanticsProvider.java       |   8 +-
 .../value/datejodalocal/JodaLocalDateUtil.java     |   5 +-
 .../JodaLocalDateValueSemanticsProvider.java       |   4 +-
 .../datesql/JavaSqlDateValueSemanticsProvider.java |   1 -
 .../Jdk8LocalDateTimeValueSemanticsProvider.java   |  13 +-
 .../JodaDateTimeValueSemanticsProvider.java        |   9 +-
 .../datetimejodalocal/JodaLocalDateTimeUtil.java   |   5 +-
 .../JodaLocalDateTimeValueSemanticsProvider.java   |   4 +-
 .../JavaUtilDateValueSemanticsProvider.java        |   1 -
 .../image/ImageValueSemanticsProviderAbstract.java |   2 +-
 ...ageValueFacetUsingSemanticsProviderFactory.java |   1 +
 .../value/markup/MarkupValueSemanticsProvider.java |   2 +-
 .../value/money/MoneyValueSemanticsProvider.java   |   4 +-
 .../password/PasswordValueSemanticsProvider.java   |   2 +-
 .../PercentageValueSemanticsProvider.java          |   3 +-
 .../value/string/StringValueSemanticsProvider.java |   2 +-
 ...imeValueFacetUsingSemanticsProviderFactory.java |   1 +
 .../timesql/JavaSqlTimeValueSemanticsProvider.java |   1 -
 ...ampValueFacetUsingSemanticsProviderFactory.java |   1 +
 .../treenode/TreeNodeValueSemanticsProvider.java   |   2 +-
 ...URLValueFacetUsingSemanticsProviderFactory.java |   1 +
 .../interactions/ActionArgValidityContext.java     |   4 +-
 .../interactions/ActionUsabilityContext.java       |   4 +-
 .../interactions/ActionValidityContext.java        |   4 +-
 .../interactions/ActionVisibilityContext.java      |   4 +-
 .../interactions/CollectionAccessContext.java      |   4 +-
 .../interactions/CollectionRemoveFromContext.java  |   4 +-
 .../interactions/CollectionVisibilityContext.java  |   4 +-
 .../metamodel/interactions/InteractionContext.java |  14 +-
 .../metamodel/interactions/InteractionUtils.java   |  27 +-
 .../metamodel/interactions/ObjectTitleContext.java |   4 +-
 .../interactions/ObjectValidityContext.java        |   4 +-
 .../interactions/ObjectVisibilityContext.java      |   4 +-
 .../metamodel/interactions/ParseValueContext.java  |   4 +-
 .../interactions/PropertyAccessContext.java        |   4 +-
 .../interactions/PropertyModifyContext.java        |   4 +-
 .../interactions/PropertyUsabilityContext.java     |   4 +-
 .../interactions/PropertyVisibilityContext.java    |   4 +-
 .../isis/core/metamodel/layout/DeweyOrderSet.java  |   5 +-
 ...onParameterDefaultsAndChoicesPostProcessor.java |  28 +-
 .../core/metamodel/progmodel/DeprecatedMarker.java |   2 -
 .../progmodel/ProgrammingModelAbstract.java        |   9 +-
 .../core/metamodel/services/ServicesInjector.java  |   8 +
 .../services/appfeat/ApplicationFeature.java       |  58 +-
 .../services/appfeat/ApplicationFeatureId.java     | 167 ++---
 .../ApplicationFeatureRepositoryDefault.java       |  79 +--
 .../bookmarks/BookmarkServiceInternalDefault.java  |   4 +-
 .../config/ConfigurationServiceDefault.java        |   5 +-
 .../services/grid/GridLoaderServiceDefault.java    |  11 +-
 .../services/grid/GridServiceDefault.java          |  23 +-
 .../services/grid/GridSystemServiceAbstract.java   |  39 +-
 .../grid/bootstrap3/GridSystemServiceBS3.java      | 216 +++----
 .../services/layout/LayoutServiceDefault.java      |  11 +-
 .../services/metamodel/DomainMemberDefault.java    |   8 +-
 .../metamodel/MetaModelServiceDefault.java         |  68 +-
 .../PersistenceSessionServiceInternal.java         |  10 +-
 .../PersistenceSessionServiceInternalNoop.java     |  15 +-
 .../services/swagger/internal/Generation.java      |  17 +-
 .../metamodel/services/swagger/internal/Util.java  |  30 +-
 .../swagger/internal/ValuePropertyFactory.java     |  19 +-
 .../apache/isis/core/metamodel/spec/Instance.java  |  41 ++
 .../core/metamodel/spec/ObjectAdapterUtils.java    |  57 --
 .../core/metamodel/spec/ObjectSpecification.java   |  15 +-
 .../core/metamodel/spec/feature/CurrentHolder.java |   1 -
 .../core/metamodel/spec/feature/ObjectAction.java  | 144 ++---
 .../spec/feature/ObjectActionContainer.java        |  19 +-
 .../spec/feature/ObjectActionParameter.java        |  26 +-
 .../core/metamodel/spec/feature/ObjectActions.java |  49 --
 .../metamodel/spec/feature/ObjectAssociation.java  |  59 +-
 .../spec/feature/ObjectAssociationContainer.java   |  30 +-
 .../core/metamodel/spec/feature/ObjectMember.java  |  34 +-
 .../spec/feature/OneToManyAssociation.java         |   4 -
 .../specloader/InjectorMethodEvaluatorDefault.java |   3 +
 .../metamodel/specloader/ServiceInitializer.java   |   4 +
 .../metamodel/specloader/SpecificationLoader.java  |  31 +-
 .../classsubstitutor/ClassSubstitutor.java         |   4 +-
 .../specloader/facetprocessor/FacetProcessor.java  |  15 +-
 .../specloader/specimpl/ContributeeMember.java     |  19 +-
 .../specloader/specimpl/FacetedMethodsBuilder.java |  31 +-
 .../specimpl/ObjectActionContributee.java          |  19 +-
 .../specloader/specimpl/ObjectActionDefault.java   |  12 +-
 .../specloader/specimpl/ObjectActionMixedIn.java   |   4 +-
 .../specimpl/ObjectActionParameterAbstract.java    |  23 +-
 .../specimpl/ObjectAssociationAbstract.java        |   4 -
 .../specloader/specimpl/ObjectMemberAbstract.java  |  12 +-
 .../specimpl/ObjectSpecificationAbstract.java      | 443 ++++++-------
 .../specimpl/OneToManyAssociationDefault.java      |  10 +-
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 124 ++--
 .../validator/MetaModelValidatorComposite.java     |   5 +-
 .../MetaModelValidatorToCheckModuleExtent.java     |  27 +-
 ...taModelValidatorToCheckObjectSpecIdsUnique.java |   6 +-
 .../validator/MetaModelValidatorVisiting.java      |   5 +-
 .../specloader/validator/ValidationFailures.java   |   1 +
 .../AuthenticationRequestAbstract.java             |   4 +-
 .../standard/AuthenticationManagerStandard.java    |  15 +-
 .../standard/AuthenticatorFuncs.java               |   4 +-
 .../runtime/authentication/standard/Registrar.java |  17 +-
 .../isis/core/runtime/snapshot/XmlSchema.java      |  49 +-
 .../isis/core/runtime/snapshot/XmlSnapshot.java    |   7 +-
 .../system/transaction/TransactionalClosure.java   |  25 -
 .../core/runtime/threadpool/ThreadPoolSupport.java |   5 +-
 .../core/webapp/content/ResourceCachingFilter.java |  49 +-
 .../isis/core/webapp/content/ResourceServlet.java  |  11 +-
 .../JdoDiscriminatorAnnotationFacetFactory.java    |   1 +
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  29 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |  22 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |  20 +-
 .../util/JdoPrimaryKeyPropertyPredicate.java       |   5 +-
 .../dflt/ProgrammingModelFacetsJava5.java          |   8 +-
 .../core/commons/lang/ListUtilsTest_adjust.java    |   8 +-
 .../core/commons/lang/ListUtilsTest_insert.java    |  10 +-
 .../metamodel/facets/AbstractFacetFactoryTest.java |   4 +-
 .../core/metamodel/facets/CollectionUtilsTest.java |   4 +-
 .../metamodel/facets/ObjectAdapterUtilsTest.java   |  11 +-
 .../TitleFacetViaTitleAnnotationTest.java          |   7 +-
 ...ValidationDigitsAnnotationFacetFactoryTest.java |   4 +-
 ...jectAssociationPredicatesTest_visibleWhere.java |  61 +-
 .../interactions/InteractionUtils_isA_Test.java    |  10 +-
 ...rvicesInjectorDefaultTest_validateServices.java |   4 +-
 .../services/appfeat/ApplicationFeatureIdTest.java |  18 +-
 .../ApplicationFeatureRepositoryDefaultTest.java   |  26 +-
 .../core/metamodel/services/grid/BS3GridTest.java  |  10 +-
 .../specloader/ServiceInitializerTest.java         |  15 +-
 .../SpecificationLoaderTestAbstract.java           |   4 +-
 ...ionParameterAbstractTest_getId_and_getName.java |  10 +-
 .../testspec/ObjectSpecificationStub.java          |  55 +-
 .../system/persistence/PersistenceSession4.java    | 653 +++-----------------
 .../persistence/PersistenceSession4_Decouple.java  | 213 -------
 .../plugins/jdo/dn4/IsisJdoSupportPlugin4.java     |   2 +-
 ...ache.isis.core.metamodel.IsisJdoMetamodelPlugin |   2 +-
 ...apache.isis.core.metamodel.IsisJdoRuntimePlugin |   2 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |  15 +-
 ...vedFromJdoColumnAnnotationFacetFactoryTest.java |   4 +-
 .../system/persistence/PersistenceSession5.java    | 645 +++----------------
 .../queries/PersistenceQueryProcessorAbstract.java |   3 +-
 .../plugins/jdo/dn5/IsisJdoSupportPlugin5.java     |   2 +-
 ...ache.isis.core.metamodel.IsisJdoMetamodelPlugin |   2 +-
 ...apache.isis.core.metamodel.IsisJdoRuntimePlugin |   2 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |  15 +-
 ...vedFromJdoColumnAnnotationFacetFactoryTest.java |   4 +-
 core/{ => plugins}/security-shiro/NOTICE           |   0
 core/{ => plugins}/security-shiro/pom.xml          |  10 +-
 .../appended-resources/supplemental-models.xml     |   0
 .../security/shiro/IsisLdapContextFactory.java     |   0
 .../apache/isis/security/shiro/IsisLdapRealm.java  |   0
 .../shiro/ShiroAuthenticatorOrAuthorizor.java      |   0
 .../apache/isis/security/shiro/ShiroConstants.java |   0
 .../ShiroAuthenticationManagerInstaller.java       |   0
 .../shiro/authorization/IsisPermission.java        |   0
 .../authorization/IsisPermissionResolver.java      |   0
 .../ShiroAuthorizationManagerInstaller.java        |   0
 .../permrolemapper/PermissionToRoleMapper.java     |   0
 .../PermissionToRoleMapperFromIni.java             |   0
 .../PermissionToRoleMapperFromString.java          |   0
 .../org/apache/isis/security/shiro/util/Util.java  |   0
 .../shiro/IsisPermissionTest_setParts.java         |   0
 .../shiro/IsisPermissionTest_typicalUsage.java     |   0
 ...AuthenticatorOrAuthorizorTest_authenticate.java |   0
 ...ticatorOrAuthorizorTest_isVisibleInAnyRole.java |   0
 .../authorization/IsisPermissionTest_equals.java   |   0
 .../PermissionToRoleMapperFromIniTest.java         |   0
 .../PermissionToRoleMapperFromStringTest.java      |   0
 .../isis/security/shiro/util/UtilTest_parse.java   |   0
 .../isis/security/shiro/permrolemapper/my.ini      |   0
 .../security-shiro/src/test/resources/shiro.ini    |   0
 core/pom.xml                                       |  15 +-
 .../isis/core/runtime/memento/CollectionData.java  |   2 +-
 .../apache/isis/core/runtime/memento/Memento.java  |  30 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |  31 +-
 .../background/CommandExecutorServiceDefault.java  |  34 +-
 .../background/CommandInvocationHandler.java       |  25 +-
 .../changes/ChangedObjectsServiceInternal.java     | 111 ++--
 .../homepage/HomePageProviderServiceDefault.java   |  17 +-
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |  19 +-
 .../PersistenceSessionServiceInternalDefault.java  |  52 +-
 .../AbstractIsisSessionTemplate.java               |  10 +-
 .../system/persistence/PersistenceSession.java     | 176 +++---
 .../system/persistence/PersistenceSessionBase.java |  11 +-
 .../adaptermanager/ObjectAdapterContext.java       | 439 ++++---------
 .../ObjectAdapterContext_AdapterManager.java       | 207 -------
 .../ObjectAdapterContext_Consistency.java          | 143 -----
 .../ObjectAdapterContext_DependencyInjection.java  |  88 +++
 .../ObjectAdapterContext_Factories.java            |  11 +-
 ...ObjectAdapterContext_LifecycleEventSupport.java |  97 +++
 .../ObjectAdapterContext_MementoSupport.java       |  32 +-
 .../ObjectAdapterContext_NewIdentifier.java        |  64 +-
 ...tAdapterContext_ObjectAdapterByIdProvider.java} | 156 +++--
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 172 ++----
 .../ObjectAdapterContext_ObjectCreation.java       | 160 +++++
 .../adaptermanager/OidAdapterHashMap.java          | 106 ----
 .../persistence/adaptermanager/OidProviders.java   | 140 +++++
 .../adaptermanager/PojoAdapterHashMap.java         | 138 -----
 .../adaptermanager/RootAndCollectionAdapters.java  | 128 ----
 .../adaptermanager/factories/OidFactory.java}      |  42 +-
 .../factories/OidFactory_Builder.java              |  71 +++
 .../system/transaction/IsisTransactionManager.java |  24 +-
 .../transaction/TransactionalClosureAbstract.java  |  30 -
 .../TransactionalClosureWithReturn.java            |  25 -
 .../TransactionalClosureWithReturnAbstract.java    |  30 -
 .../IsisComponentProvider.java                     |   3 +-
 .../apache/isis/core/webapp/modules/WebModule.java |   1 +
 .../core/webapp/modules/WebModule_RestEasy.java    |  11 +-
 .../webapp/modules/WebModule_StaticResources.java  |  79 +++
 .../datanucleus/metamodel/JdoPropertyUtils.java    |  18 +-
 .../domainobjects/DomainObjectReprRenderer.java    |  34 +-
 .../domaintypes/DomainTypeReprRenderer.java        |  22 +-
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |  25 +-
 .../ExceptionMapperForRuntimeException.java        |  42 +-
 .../resources/DomainObjectResourceServerside.java  |   2 +-
 .../resources/ObjectAdapterUpdateHelper.java       | 173 +++---
 .../restfulobjects/server/util/OidUtils.java       |  64 +-
 .../IsisTransactionFilterForRestfulObjects.java    |   7 +-
 .../wicket/ConverterForObjectAdapter.java          |   6 +-
 .../wicket/ConverterForObjectAdapterMemento.java   |   9 +-
 .../integration/wicket/WebRequestCycleForIsis.java |   4 +-
 .../wicket/model/models/BookmarkTreeNode.java      |  45 +-
 .../wicket/model/models/EntityCollectionModel.java |  12 +-
 .../viewer/wicket/model/models/ScalarModel.java    |   2 +-
 .../collection/AssociatedWithActionsHelper.java    |  21 +-
 .../collection/bulk/BulkActionsHelper.java         |   8 +-
 .../CollectionContentsAsAjaxTablePanel.java        |  64 +-
 .../summary/CollectionContentsAsSummary.java       |  15 +-
 .../CollectionContentsAsSummaryFactory.java        |  19 +-
 .../ui/pages/accmngt/register/RegisterPanel.java   |   6 +-
 .../isis/viewer/wicket/ui/pages/home/HomePage.java |  19 +-
 .../DelegatingInvocationHandlerDefault.java        |   7 +-
 .../handlers/DomainObjectInvocationHandler.java    |  66 +-
 .../src/main/webapp/WEB-INF/logging.properties     |   2 -
 .../src/main/webapp/WEB-INF/logging.properties     |   2 -
 529 files changed, 4032 insertions(+), 17290 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
index 474b0e5..fa5f772 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
@@ -24,7 +24,7 @@ package org.apache.isis.applib.adapters;
  * objects.
  *
  * <p>
- * Specifically, this interface embodies three related capabilties:
+ * Specifically, this interface embodies three related capabilities:
  * <ul>
  * <li>to parse a string representation and convert to an object.
  * <li>to provide a string representation of the object, for use as its title.
@@ -113,5 +113,13 @@ public interface Parser<T> {
      * <tt>May 2, 2007</tt>, but its editable form might be <tt>20070502</tt>.
      */
     String parseableTitleOf(T existing);
+    
+    /**
+     * The max length of objects that can be parsed (if any).
+     * A return type of -1 corresponds to unlimited.
+     */
+    default int maxLength() {
+        return -1;
+    }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java
deleted file mode 100644
index b5877c5..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java
+++ /dev/null
@@ -1,29 +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.applib.adapters;
-
-public interface Parser2<T> extends Parser<T> {
-
-    /**
-     * The max length of objects that can be parsed (if any)
-     */
-    Integer maxLength();
-
-}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java b/core/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
index 0dcb0eb..67c9fa5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
@@ -18,25 +18,25 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
-import java.util.List;
+import java.util.Set;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
 public interface ApplicationFeatureRepository  {
 
     @Programmatic
-    List<String> packageNames();
+    Set<String> packageNames();
 
     @Programmatic
-    List<String> packageNamesContainingClasses(ApplicationMemberType memberType);
+    Set<String> packageNamesContainingClasses(ApplicationMemberType memberType);
 
     @Programmatic
-    List<String> classNamesContainedIn(String packageFqn, ApplicationMemberType memberType);
+    Set<String> classNamesContainedIn(String packageFqn, ApplicationMemberType memberType);
 
     @Programmatic
-    List<String> classNamesRecursivelyContainedIn(String packageFqn);
+    Set<String> classNamesRecursivelyContainedIn(String packageFqn);
 
     @Programmatic
-    List<String> memberNamesOf(String packageFqn, String className, ApplicationMemberType memberType);
+    Set<String> memberNamesOf(String packageFqn, String className, ApplicationMemberType memberType);
 
 }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
index f45bc17f..fa026ca 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
@@ -85,7 +85,7 @@ public interface BookmarkService {
         /**
          * Required in order to recreate view models.
          */
-        DONT_RESET
+        DONT_REFRESH
     }
 
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java b/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
index 418d8f8..ce1a9fa 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
@@ -16,7 +16,7 @@
  */
 package org.apache.isis.applib.util;
 
-import java.util.Iterator;
+import java.util.BitSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.function.Function;
@@ -36,13 +36,21 @@ public class ToString<T> {
     public static <T> ToString<T> toString(String name, Function<? super T, ?> getter) {
         Objects.requireNonNull(name);
         Objects.requireNonNull(getter);
-        return new ToString<>(name, getter);
+        return new ToString<>(name, getter, false);
+    }
+    
+    public static <T> ToString<T> toStringOmmitIfAbsent(String name, Function<? super T, ?> getter) {
+        Objects.requireNonNull(name);
+        Objects.requireNonNull(getter);
+        return new ToString<>(name, getter, true);
     }
 
     private final List<String> names = _Lists.newArrayList();
     private final List<Function<? super T, ?>> getters = _Lists.newArrayList();
+    private final BitSet ommitIfAbsent = new BitSet();
 
-    private ToString(String name, Function<? super T, ?> getter) {
+    private ToString(String name, Function<? super T, ?> getter, boolean ommitIfAbsent) {
+        addBit(ommitIfAbsent);
         names.add(name);
         getters.add(getter);
     }
@@ -50,6 +58,16 @@ public class ToString<T> {
     public ToString<T> thenToString(String name, Function<? super T, ?> getter){
         Objects.requireNonNull(name);
         Objects.requireNonNull(getter);
+        addBit(false);
+        names.add(name);
+        getters.add(getter);
+        return this;
+    }
+    
+    public ToString<T> thenToStringOmmitIfAbsent(String name, Function<? super T, ?> getter){
+        Objects.requireNonNull(name);
+        Objects.requireNonNull(getter);
+        addBit(true);
         names.add(name);
         getters.add(getter);
         return this;
@@ -71,19 +89,33 @@ public class ToString<T> {
 
         Objects.requireNonNull(valueToStringFunction);
 
-        final Iterator<String> nameIterator = names.iterator();
+        final int[] index = {-1}; // value reference
 
         return String.format("%s{%s}",
 
+                //ommitIfAbsent.toString(),
                 target.getClass().getSimpleName(),
 
                 getters.stream()
+                .peek(__->index[0]++)
                 .map(getter->getter.apply(target))
+                .filter(value->value!=null || !ommitIfAbsent.get(index[0]))
                 .map(valueToStringFunction)
-                .map(valueLiteral->nameIterator.next()+"="+valueLiteral)
+                .map(valueLiteral->names.get(index[0])+"="+valueLiteral)
                 .collect(Collectors.joining(", "))
 
                 );
     }
+    
+    // -- HELPER
+    
+    private void addBit(boolean bit) {
+        final int index = names.size();
+        if(bit) {
+            ommitIfAbsent.set(index);
+        } else {
+            ommitIfAbsent.clear(index);
+        }
+    }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
index ab962d4..6cf79f3 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
@@ -35,7 +35,7 @@ public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, List<Object>>
         List<Object> domainObjects = _Lists.newArrayList();
         for (final OidDto oidDto : oidsDto.getOid()) {
             final Bookmark bookmark = Bookmark.from(oidDto);
-            Object domainObject = bookmarkService.lookup(bookmark, BookmarkService.FieldResetPolicy.DONT_RESET);
+            Object domainObject = bookmarkService.lookup(bookmark, BookmarkService.FieldResetPolicy.DONT_REFRESH);
             domainObjects.add(domainObject);
         }
         return domainObjects;
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
index 1a724a1..57efc83 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
@@ -29,7 +29,7 @@ public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
 
         final Bookmark bookmark = Bookmark.from(oidDto);
 
-        return bookmarkService.lookup(bookmark, BookmarkService.FieldResetPolicy.DONT_RESET);
+        return bookmarkService.lookup(bookmark, BookmarkService.FieldResetPolicy.DONT_REFRESH);
     }
 
     @Override
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
index e28d83f..8d77315 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
@@ -63,14 +63,11 @@ public final class _NullSafe {
     /**
      * If {@code nullable} is {@code null} returns the empty stream,
      * otherwise returns a Stream containing the single element {@code nullable}.
-     * <p>
-     * Note: this method signature only matches if none of the other stream(?) methods match.
-     * </p>
      * 
      * @param nullable
      * @return non-null stream object
      */
-    public static <T> Stream<T> stream(final T nullable) {
+    public static <T> Stream<T> streamNullable(final T nullable) {
         return nullable != null ? Stream.of(nullable) : Stream.empty();
     }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
similarity index 61%
copy from core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
copy to core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
index e2acd22..6ae5d06 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
@@ -16,15 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.commons.internal.functions;
 
-import java.util.Objects;
-import java.util.function.Predicate;
+package org.apache.isis.commons.internal.base;
 
 /**
  * <h1>- internal use only -</h1>
  * <p>
- * General purpose Predicates.
+ *      Provides Tuples of arity 2,
  * </p>
  * <p>
  * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
@@ -33,22 +31,31 @@ import java.util.function.Predicate;
  *
  * @since 2.0.0
  */
-public final class _Predicates {
+public final class _Tuples {
 
-    /**
-     * @param operand
-     * @return a Predicate that tests its argument against equality to the given {@code operand}
-     */
-    public static <T> Predicate<T> equalTo(T operand) {
-        return arg->Objects.equals(arg, operand);
-    }
-
-    /**
-     * @param operand
-     * @return a Predicate that tests its argument whether it is the same instance as the given {@code operand}
-     */
-    public static <T> Predicate<T> sameAs(T operand) {
-        return arg-> arg == operand;
+    private _Tuples(){}
+    
+    public static class Tuple2<T1, T2>{
+        private final T1 _1;
+        private final T2 _2;
+        
+        private Tuple2(T1 _1, T2 _2) {
+            this._1 = _1;
+            this._2 = _2;
+        }
+        
+        /**
+         * @return first element of this tuple
+         */
+        public T1 get_1() { return _1; }
+        /**
+         * @return second element of this tuple
+         */
+        public T2 get_2() { return _2; }
     }
     
+    public static <T1, T2> Tuple2<T1, T2> pair(T1 _1, T2 _2) {
+        return new Tuple2<T1, T2>(_1, _2);
+    }
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
index 5b163ae..ebb5df0 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
@@ -27,6 +27,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -145,6 +146,25 @@ public final class _Lists {
                 ()->Collectors.<T, LinkedList<T>>toCollection(LinkedList::new) );
     }
 
+    // -- COPY ON WRITE LIST
+
+    public static <T> CopyOnWriteArrayList<T> newCopyOnWriteArrayList() {
+        return new CopyOnWriteArrayList<T>();
+    }
+
+    public static <T> CopyOnWriteArrayList<T> newCopyOnWriteArrayList(@Nullable Collection<T> collection) {
+        if(collection==null) {
+            return newCopyOnWriteArrayList();
+        }
+        return new CopyOnWriteArrayList<T>(collection);
+    }
+
+    public static <T> CopyOnWriteArrayList<T> newCopyOnWriteArrayList(@Nullable Iterable<T> iterable) {
+        return _Collections.collectFromIterable(iterable, _Lists::newCopyOnWriteArrayList,
+                ()->Collectors.<T, CopyOnWriteArrayList<T>>toCollection(CopyOnWriteArrayList::new) );
+    }
+
+    
     // -- TRANSFORMATION
 
     public static <T, R> List<R> transform(@Nullable List<T> input, Function<T, R> mapper) {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
index e2acd22..eb06059 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
@@ -21,6 +21,8 @@ package org.apache.isis.commons.internal.functions;
 import java.util.Objects;
 import java.util.function.Predicate;
 
+import org.apache.isis.commons.internal.base._NullSafe;
+
 /**
  * <h1>- internal use only -</h1>
  * <p>
@@ -50,5 +52,20 @@ public final class _Predicates {
     public static <T> Predicate<T> sameAs(T operand) {
         return arg-> arg == operand;
     }
+
+    /**
+     * 
+     * @return a Predicate that always tests true
+     */
+    public static <T> Predicate<T> alwaysTrue() {
+        return __->true;
+    }
+
+    /**
+     * @return a Predicate that tests for the operand to be not null
+     */
+    public static <T> Predicate<T> isPresent() {
+        return _NullSafe::isPresent;
+    }
     
 }
diff --git a/core/legacy/applib-legacy/.gitignore b/core/legacy/applib-legacy/.gitignore
deleted file mode 100644
index a48e45b..0000000
--- a/core/legacy/applib-legacy/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target-ide
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
deleted file mode 100644
index fb6be5b..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ /dev/null
@@ -1,184 +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.applib;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.applib.services.metamodel.MetaModelService;
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.title.TitleService;
-import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.applib.services.xactn.TransactionService;
-
-/**
- * A domain service that acts as a framework's container for managing the 
- * domain objects, and which provides functionality to those domain objects
- * in order that they might interact or have knowledge of with the "outside world".
- *
- * @deprecated - use {@link MessageService}, {@link TitleService}, {@link RepositoryService}, 
- * {@link FactoryService}, {@link UserService}, {@link TransactionService}.
- */
-@Deprecated
-public interface DomainObjectContainer {
-
-    // -- resolve, objectChanged (DEPRECATED)
-
-    /**
-     * Re-initialises the fields of an object, using the
-     * JDO {@link javax.jdo.PersistenceManager#refresh(Object) refresh} API.
-     *
-     * <p>
-     *     Previously this method was provided for manual control of lazy loading; with the JDO/DataNucleus objectstore
-     *     that original functionality is performed automatically by the framework.
-     * </p>
-     *
-     * @deprecated - equivalent to {@link org.apache.isis.applib.services.jdosupport.IsisJdoSupport#refresh(Object)}.
-     */
-    @Programmatic
-    @Deprecated
-    void resolve(Object domainObject);
-
-    /**
-     * Provided that the <tt>field</tt> parameter is <tt>null</tt>, re-initialises the fields of an object, using the
-     * JDO {@link javax.jdo.PersistenceManager#refresh(Object) refresh} API.
-     *
-     * <p>
-     *     Previously this method was provided for manual control of lazy loading; with the JDO/DataNucleus objectstore
-     *     that original functionality is performed automatically by the framework.
-     * </p>
-     *
-     * @deprecated - equivalent to {@link org.apache.isis.applib.services.jdosupport.IsisJdoSupport#refresh(Object)}.
-     */
-    @Programmatic
-    @Deprecated
-    void resolve(Object domainObject, Object field);
-
-    /**
-     * This method does nothing (is a no-op).
-     *
-     * <p>
-     *     Previous this method was provided for manual control of object dirtyng; with the JDO/DataNucleus objectstore
-     *     that original functionality is performed automatically by the framework.
-     * </p>
-     *
-     * @deprecated - is a no-op
-     */
-    @Programmatic
-    @Deprecated
-    void objectChanged(Object domainObject);
-
-
-    
-
-    // -- commit (DEPRECATED)
-
-    /**
-     * Commit all changes to the object store.
-     * 
-     * <p>
-     * This has been deprecated because the demarcation of transaction
-     * boundaries is a framework responsibility rather than being a
-     * responsibility of the domain object model.
-     * 
-     * @deprecated
-     */
-    @Programmatic
-    @Deprecated
-    void commit();
-
-    
-
-    // -- newViewModelInstance
-
-
-    /**
-     * Create a new {@link ViewModel} instance of the specified type, initializing with the specified memento.
-     *
-     */
-    @Programmatic
-    <T> T newViewModelInstance(final Class<T> ofType, final String memento);
-
-    
-
-
-    // -- isValid, validate
-
-    /**
-     * Whether the object is in a valid state, that is that none of the
-     * validation of properties, collections and object-level is vetoing.
-     * 
-     * @see #validate(Object)
-     *
-     * @deprecated - semantics of when this can be called in the object's lifecycle is not well-defined
-     */
-    @Deprecated
-    @Programmatic
-    boolean isValid(Object domainObject);
-
-    /**
-     * The reason, if any why the object is in a invalid state
-     * 
-     * <p>
-     * Checks the validation of all of the properties, collections and
-     * object-level.
-     * </p>
-     *
-     * @see #isValid(Object)
-     *
-     * @deprecated - semantics of when this can be called in the object's lifecycle is not well-defined
-     */
-    @Deprecated
-    @Programmatic
-    String validate(Object domainObject);
-
-    
-
-    // -- isViewModel
-
-    /**
-     * @deprecated - use {@link org.apache.isis.applib.services.metamodel.MetaModelService#sortOf(Class, MetaModelService.Mode)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    boolean isViewModel(Object domainObject);
-
-    
-
-    // -- persist, remove (DEPRECATED)
-
-    /**
-     * @deprecated - use {@link org.apache.isis.applib.services.repository.RepositoryService#persist(Object)} instead. Please note that {@link org.apache.isis.applib.services.repository.RepositoryService#persist(Object)} will not throw an exception if the Domain Object is already persistent, so the implementation will be the same as that of {@link org.apache.isis.applib.services.repository.RepositoryService#persist(Object)}instead.
-     */
-    @Deprecated
-    @Programmatic
-    void persist(Object domainObject);
-
-    /**
-     * @deprecated - use {@link org.apache.isis.applib.services.repository.RepositoryService#remove(Object)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    void remove(Object persistentDomainObject);
-
-    
-
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Encodable.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Encodable.java
deleted file mode 100644
index b9db3ad..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Encodable.java
+++ /dev/null
@@ -1,86 +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.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-
-/**
- * Indicates that the class can be encoded or decoded either by delegating to an
- * {@link EncoderDecoder} or through some externally-configured mechanism.
- * 
- * @see Defaulted
- * @see Parseable
- * @see Value
- *
- *
- * <p>
- *     Note: This annotation is only incompletely recognized by the framework.
- * </p>
- *
- * @deprecated
- */
-@Deprecated
-@Inherited
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Encodable {
-
-    /**
-     * The fully qualified name of a class that implements the
-     * {@link EncoderDecoder} interface.
-     * 
-     * <p>
-     * This is optional because some implementations may pick up encodeability
-     * via a configuration file, or via the equivalent
-     * {@link #encoderDecoderClass()}.
-     * 
-     * <p>
-     * It is common for value classes to act as their own encoder/decoders. Note
-     * that the framework requires that the nominated class provides a
-     * <tt>public</tt> no-arg constructor on the class. It instantiates an
-     * instance in order to do the encoding or decoding, uses the result and
-     * discards the instantiated object. What that means in particular is that a
-     * self-encoding class shouldn't encode its own state, it should encode the
-     * state of the object passed to it.
-     * 
-     * <p>
-     * Implementation note: the default value provided here is simply an empty
-     * string because <tt>null</tt> is not a valid default.
-     */
-    String encoderDecoderName() default "";
-
-    /**
-     * As per {@link #encoderDecoderName()}, but specifying a class literal
-     * rather than a fully qualified class name.
-     * 
-     * <p>
-     * Implementation note: the default value provided here is simply the
-     * {@link Encodable}'s own class, because <tt>null</tt> is not a valid
-     * default.
-     */
-    Class<?> encoderDecoderClass() default Encodable.class;
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
deleted file mode 100644
index deddc6d..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
+++ /dev/null
@@ -1,185 +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.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.apache.isis.commons.internal.base._Strings;
-
-/**
- * Specifies the positioning of an entity's (groups of) properties and of its collections, on a page, column by column.
- *
- * <p>
- * The left column and middle column determine the ordering of the entity's (groups of) properties.  The
- * value of the {@link #left() left} list and {@link #middle() middle} list specify the order
- * of the property groups (inferred from each property's {@link MemberOrder#name() MemberOrder.name} attribute.
- *
- * <p>
- * The right column is for the entity's collections.  The order of this collections is simply as
- * determined by the collection's {@link MemberOrder#sequence() MemberOrder.sequence} attribute
- *
- * <p>
- *     The recommended alternative is to use the <code>Xxx.layout.xml</code> file, where <code>Xxx</code> is the domain object name.
- * </p>
- */
-@Inherited
-@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Deprecated
-public @interface MemberGroupLayout {
-
-    /**
-     * The relative widths of the columns of members.
-     */
-    public static class ColumnSpans {
-
-        private final int left;
-        private final int middle;
-        private final int right;
-        private final int collections;
-
-        public static ColumnSpans valueOf(String str) {
-            try {
-                final List<Integer> list = _Strings.splitThenStream(str, ",")
-                        .map(Integer::parseInt)
-                        .collect(Collectors.toList());
-                return asSpans(list);
-            } catch(RuntimeException ex) {
-                return null;
-            }
-        }
-        public static ColumnSpans asSpans(int... columnSpans) {
-            final List<Integer> list = new ArrayList<>();
-            for (int i : columnSpans) {
-                list.add(i);
-            }
-            return asSpans(list);
-        }
-        private static ColumnSpans asSpans(List<Integer> list) {
-            return new ColumnSpans(list);
-        }
-        private ColumnSpans(List<Integer> list) {
-            this.left = getElse(list,0,4);
-            this.middle = getElse(list,1,0);
-            this.right = getElse(list,2,0);
-            this.collections = getElse(list,3,8);
-        }
-        private static int getElse(List<Integer> list, int i, int dflt) {
-            return list != null && list.size() > i? list.get(i): dflt;
-        }
-
-        public int getLeft() {
-            return left;
-        }
-        public int getMiddle() {
-            return middle;
-        }
-        public int getRight() {
-            return right;
-        }
-        public int getCollections() {
-            return collections;
-        }
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + collections;
-            result = prime * result + left;
-            result = prime * result + middle;
-            result = prime * result + right;
-            return result;
-        }
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj)
-                return true;
-            if (obj == null)
-                return false;
-            if (getClass() != obj.getClass())
-                return false;
-            ColumnSpans other = (ColumnSpans) obj;
-            if (collections != other.collections)
-                return false;
-            if (left != other.left)
-                return false;
-            if (middle != other.middle)
-                return false;
-            if (right != other.right)
-                return false;
-            return true;
-        }
-        public String name() {
-            return String.format("[%d,%d,%d,%d]", left, middle, right, collections);
-        }
-        public boolean exceedsRow() {
-            return getLeft() + getMiddle() + getRight() + getCollections() > 12;
-        }
-    }
-
-    /**
-     * Specify the spans of each of the columns.
-     *
-     * <p>
-     * The sum of the spans is always 12.
-     */
-    int[] columnSpans() default {4,0,0,8};
-
-    /**
-     * Order of groups of properties as they appear in the left-most column of a webpage,
-     * grouped as they appear as the <tt>name</tt> attribute of the {@link MemberOrder}
-     * annotation.
-     *
-     * <p>
-     * The order in this list determines the order that the property groups will be rendered.
-     * By convention any {@link MemberOrder} that does not have a {@link MemberOrder#name() name} is considered
-     * to be in the default group, whose name is hard-coded as <i>General</i>.
-     *
-     * <p>
-     * Equivalent to {@link MemberGroups#value()} annotation.
-     */
-    String[] left() default {};
-
-    /**
-     * As {@link #left()}, but for the middle column in a page.
-     *
-     * <p>
-     * If the value of this attribute is non-empty but the {@link #columnSpans()} specifies a zero size, then the
-     * framework will not boot and will instead indicate a meta-model validation exception.
-     */
-    String[] middle() default {};
-
-    /**
-     * As {@link #right()}, but for the right column in a page.
-     *
-     * <p>
-     * If the value of this attribute is non-empty but the {@link #columnSpans()} specifies a zero size, then the
-     * framework will not boot and will instead indicate a meta-model validation exception.
-     */
-    String[] right() default {};
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Parseable.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Parseable.java
deleted file mode 100644
index 3a5dc4b..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/annotation/Parseable.java
+++ /dev/null
@@ -1,77 +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.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.isis.applib.adapters.Parser;
-
-/**
- * Indicates that the class can be parsed either by delegating to an
- * {@link Parser} or through some externally-configured mechanism.
- *
- * <p>
- *     Note: This annotation is only incompletely recognized by the framework.
- * </p>
- * @deprecated
- */
-@Deprecated
-@Inherited
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Parseable {
-
-    /**
-     * The fully qualified name of a class that implements the {@link Parser}
-     * interface.
-     * 
-     * <p>
-     * This is optional because some implementations may pick up parseability
-     * via a configuration file either for the framework itself, or through a
-     * viewer-specific configuration of a widget (eg a calendar view for a
-     * date), or indeed through the equivalent {@link #parserClass()}.
-     * 
-     * <p>
-     * It is common for value classes to act as their own parsers. Note that the
-     * framework requires that the nominated class provides a <tt>public</tt>
-     * no-arg constructor on the class. It instantiates an instance in order to
-     * do the parsing, uses the result and discards the instantiated object.
-     * 
-     * <p>
-     * Implementation note: the default value provided here is simply the empty
-     * string because <tt>null</tt> is not a valid default.
-     */
-    String parserName() default "";
-
-    /**
-     * As per {@link #parserName()}, but specifying a class literal rather than
-     * a fully qualified class name.
-     * 
-     * <p>
-     * Implementation note: the default value provided here is simply the
-     * {@link Parseable}'s own class, because <tt>null</tt> is not a valid
-     * default.
-     */
-    Class<?> parserClass() default Parseable.class;
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixture.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixture.java
deleted file mode 100644
index 8230349..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixture.java
+++ /dev/null
@@ -1,184 +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.applib.fixtures;
-
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Convenience class for creating fixtures.
- * 
- * <p>
- * Most subclasses will simply override {@link #install()} to setup objects. In
- * addition though fixtures may also:
- * <ul>
- * <li>change the date/time within the course of fixture installation, using
- * {@link #setDate(int, int, int)} and {@link #setTime(int, int)}.
- * <li>create composite fixtures using {@link #addFixture(Object)}.
- * <li>search for existing objects using
- * {@link #firstMatch(Class, Predicate)} or
- * {@link #uniqueMatch(Class, Predicate)} (and various
- * overloads thereof).
- * </ul>
- * 
- * <p>
- * This class has been designed so that it can also be used as a regular
- * domain object.  This may be useful to allow users to setup demo data in a
- * running application.
- *  
- * <p>
- * To automatically logon for the demo/test, use {@link LogonFixture}.
- *
- * @deprecated - use {@link FixtureScript} instead.
- */
-@Deprecated
-public abstract class AbstractFixture extends BaseFixture implements CompositeFixture {
-
-    private final List<Object> fixtures = Lists.newArrayList();
-
-
-    /**
-     * Assumed to be {@link FixtureType#DOMAIN_OBJECTS data} fixture.
-     */
-    public AbstractFixture() {
-        this(FixtureType.DOMAIN_OBJECTS);
-    }
-
-    public AbstractFixture(final FixtureType fixtureType) {
-        super(fixtureType);
-    }
-
-    // ///////////////////////////////////////////////////////////////
-    // install() hook (for non-composites)
-    // ///////////////////////////////////////////////////////////////
-
-    /**
-     * Most subclasses will override this method, but composite fixtures should
-     * instead call {@link #addFixture(Object)} in their constructor.
-     * 
-     * <p>
-     * The iteration over the child fixtures is then performed by the
-     * <tt>FixturesInstallerDelegate</tt> (or equivalent).
-     * 
-     * <p>
-     * A slightly strange implementation?  Oh well, it works.
-     */
-    @Override
-    public void install() {
-    }
-
-
-
-    // CompositeFixture impl
-
-    /**
-     * Allows the fixture to act as a composite (call within constructor).
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    protected void addFixture(final Object fixture) {
-        fixtures.add(fixture);
-    }
-
-    /**
-     * Returns an array of any fixtures that have been
-     * {@link #addFixture(Object) added}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Programmatic // to allow this class to be used as a domain object
-    @Override
-    public List<Object> getFixtures() {
-        return Collections.unmodifiableList(fixtures);
-    }
-
-
-
-    // Date and time
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Programmatic // to allow this class to be used as a domain object
-    public void earlierDate(final int years, final int months, final int days) {
-        if (shouldIgnoreCallBecauseNoClockSetup("earlierDate()")) {
-            return;
-        }
-        clock.addDate(-years, -months, -days);
-    }
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Programmatic // to allow this class to be used as a domain object
-    public void earlierTime(final int hours, final int minutes) {
-        if (shouldIgnoreCallBecauseNoClockSetup("earlierTime()")) {
-            return;
-        }
-        clock.addTime(-hours, -minutes);
-    }
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Programmatic // to allow this class to be used as a domain object
-    public void laterDate(final int years, final int months, final int days) {
-        if (shouldIgnoreCallBecauseNoClockSetup("laterDate()")) {
-            return;
-        }
-        clock.addDate(years, months, days);
-    }
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Programmatic // to allow this class to be used as a domain object
-    public void laterTime(final int hours, final int minutes) {
-        if (shouldIgnoreCallBecauseNoClockSetup("laterTime()")) {
-            return;
-        }
-        clock.addTime(hours, minutes);
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixtureSusa.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixtureSusa.java
deleted file mode 100644
index 292bad6..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/AbstractFixtureSusa.java
+++ /dev/null
@@ -1,64 +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.applib.fixtures;
-
-import org.apache.isis.applib.fixtures.switchuser.SwitchUserService;
-import org.apache.isis.applib.fixtures.switchuser.SwitchUserServiceAware;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Convenience class for creating fixtures, with support to allow
- * users to be switching using the {@link SwitchUserService}.
- * 
- * <p>
- * Note that unlike {@link AbstractFixture}, fixtures inheriting from
- * this class <i>cannot</i> be used as domain objects (the {@link SwitchUserService} does
- * not conform to the domain object programming conventions).
- *
- * @deprecated - use {@link FixtureScript} instead.
- */
-@Deprecated
-public abstract class AbstractFixtureSusa extends AbstractFixture implements SwitchUserServiceAware {
-
-    public AbstractFixtureSusa() {
-        super();
-    }
-
-    public AbstractFixtureSusa(final FixtureType fixtureType) {
-        super(fixtureType);
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    protected void switchUser(final String username, final String... roles) {
-        switchUserService.switchUser(username, roles);
-    }
-
-
-    private SwitchUserService switchUserService;
-
-    @Override
-    public void setService(final SwitchUserService switchUserService) {
-        this.switchUserService = switchUserService;
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/BaseFixture.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/BaseFixture.java
deleted file mode 100644
index 9adbdbe..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/BaseFixture.java
+++ /dev/null
@@ -1,125 +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.applib.fixtures;
-
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * @deprecated - use {@link FixtureScript} instead.
- */
-@Deprecated
-abstract class BaseFixture implements InstallableFixture {
-
-    private final FixtureType fixtureType;
-    FixtureClock clock = null;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public BaseFixture(final FixtureType fixtureType) {
-        this.fixtureType = fixtureType;
-        try {
-            clock = FixtureClock.initialize();
-        } catch (final RecoverableException ex) {
-            clock = null;
-            System.err.println(ex.getMessage());
-            System.err.println("calls to change date or time will be ignored");
-        }
-    }
-
-    /**
-     * As specified in constructor.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Override
-    public final FixtureType getType() {
-        return fixtureType;
-    }
-
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public void setDate(final int year, final int month, final int day) {
-        if (shouldIgnoreCallBecauseNoClockSetup("setDate()")) {
-            return;
-        }
-        clock.setDate(year, month, day);
-    }
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public void setTime(final int hour, final int minute) {
-        if (shouldIgnoreCallBecauseNoClockSetup("setTime()")) {
-            return;
-        }
-        clock.setTime(hour, minute);
-    }
-
-    /**
-     * The {@link Clock} singleton, downcast to {@link FixtureClock}.
-     * 
-     * <p>
-     * Will return <tt>null</tt> if {@link FixtureClock} could not be
-     * {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public FixtureClock getFixtureClock() {
-        return clock;
-    }
-
-    /**
-     * Will print warning message and do nothing if {@link FixtureClock} could
-     * not be {@link FixtureClock#initialize() initialized}.
-     *
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public void resetClock() {
-        if (shouldIgnoreCallBecauseNoClockSetup("resetClock()")) {
-            return;
-        }
-        clock.reset();
-    }
-
-    boolean shouldIgnoreCallBecauseNoClockSetup(final String methodName) {
-        if (clock == null) {
-            System.err.println("clock not set, call to " + methodName + " ignored");
-            return true;
-        }
-        return false;
-    }
-
-}
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/DateFixture.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/DateFixture.java
deleted file mode 100644
index 9980670..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/DateFixture.java
+++ /dev/null
@@ -1,126 +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.applib.fixtures;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Sole purpose is to set the date/time while object fixtures are being
- * installed.
- * 
- * <p>
- * An alternative is to change the date using
- * {@link AbstractFixture#setDate(int, int, int)} and
- * {@link AbstractFixture#setTime(int, int)}.
- * 
- * <p>
- * Note that the last date set <i>will</i> remain in force for the application
- * itself. To revert to the current time, have a fixture at the end call
- * {@link #resetClock()}.
- * 
- * @see SwitchUserFixture
- *
- * @deprecated - use {@link FixtureScript} instead.
- */
-@Deprecated
-public class DateFixture extends BaseFixture {
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public DateFixture(final int year, final int month, final int day, final int hour, final int minutes) {
-        super(FixtureType.OTHER);
-        this.year = year;
-        this.month = month;
-        this.day = day;
-        this.hour = hour;
-        this.minute = minutes;
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public DateFixture(final int year, final int month, final int day) {
-        this(year, month, day, 0, 0);
-    }
-
-    private final int year;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public int getYear() {
-        return year;
-    }
-
-    private final int month;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public int getMonth() {
-        return month;
-    }
-
-    private final int day;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public int getDay() {
-        return day;
-    }
-
-    private final int hour;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public int getHour() {
-        return hour;
-    }
-
-    private final int minute;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public int getMinute() {
-        return minute;
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Override
-    public void install() {
-        setDate(year, month, day);
-        setTime(hour, minute);
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/SwitchUserFixture.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/SwitchUserFixture.java
deleted file mode 100644
index 1b814b4..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/SwitchUserFixture.java
+++ /dev/null
@@ -1,108 +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.applib.fixtures;
-
-import java.util.List;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.fixtures.switchuser.SwitchUserService;
-import org.apache.isis.applib.fixtures.switchuser.SwitchUserServiceAware;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-
-/**
- * Sole purpose is to switch the current user while object fixtures are being
- * installed.
- * 
- * <p>
- * An alternative is to switch user using the
- * {@link AbstractFixtureSusa#switchUser(String, String...) switchUser} method.
- * 
- * <p>
- * Note that (unlike the otherwise similar {@link DateFixture}) the last user
- * switched to is <i>not</i> used as the logon fixture. If you want to
- * automatically logon as some user, use the {@link LogonFixture}.
- * 
- * @see DateFixture
- * @see LogonFixture
- *
- * @deprecated - use {@link FixtureScript} instead.
- */
-@Deprecated
-public class SwitchUserFixture extends BaseFixture implements SwitchUserServiceAware {
-
-    private final String username;
-    private final List<String> roles;
-    private SwitchUserService switchUserService;
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public SwitchUserFixture(final String username, final String... roles) {
-        this(username, Lists.newArrayList(roles));
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public SwitchUserFixture(final String username, final List<String> roles) {
-        super(FixtureType.OTHER);
-        this.username = username;
-        this.roles = ImmutableList.copyOf(roles);
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public String getUsername() {
-        return username;
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    public List<String> getRoles() {
-        return roles;
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Override
-    public void install() {
-        switchUserService.switchUser(username, roles.toArray(new String[] {}));
-    }
-
-    /**
-     * @deprecated - use {@link FixtureScript} instead.
-     */
-    @Deprecated
-    @Override
-    public void setService(final SwitchUserService switchUserService) {
-        this.switchUserService = switchUserService;
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserService.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserService.java
deleted file mode 100644
index 54d9c11..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserService.java
+++ /dev/null
@@ -1,59 +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.applib.fixtures.switchuser;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.fixtures.AbstractFixture;
-import org.apache.isis.applib.services.sudo.SudoService;
-
-/**
- * Not intended to be used directly; decouples the {@link AbstractFixture},
- * which needs to be able to switch users dynamically, from the rest of the
- * framework's runtime.
- * 
- * <p>
- * A suitable implementation is injected into {@link AbstractFixture} when
- * installed.
- *
- * @deprecated - use instead {@link SudoService}.
- */
-@Deprecated
-public interface SwitchUserService {
-
-    /**
-     * Switches the current user with the list of specified roles.
-     *
-     * @deprecated
-     */
-    @Deprecated
-    @Programmatic
-    void switchUser(String username, String... roles);
-
-    /**
-     * Switches the current user with the list of specified roles.
-     * @deprecated
-     */
-    @Deprecated
-    @Programmatic
-    void switchUser(String username, List<String> roles);
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserServiceAware.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserServiceAware.java
deleted file mode 100644
index b261ae2..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/SwitchUserServiceAware.java
+++ /dev/null
@@ -1,37 +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.applib.fixtures.switchuser;
-
-import org.apache.isis.applib.services.sudo.SudoService;
-
-/**
- * Implement if require {@link SwitchUserService} to be injected into fixture.
- *
- * @deprecated - use instead {@link SudoService}
- */
-@Deprecated
-public interface SwitchUserServiceAware {
-
-    /**
-     * @deprecated - use instead {@link SudoService}
-     */
-    @Deprecated
-    void setService(SwitchUserService switchUserService);
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/package-info.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/package-info.java
deleted file mode 100644
index 07d5bb2..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/fixtures/switchuser/package-info.java
+++ /dev/null
@@ -1,28 +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.
- */
-
-/**
- * Provides support for switching the current user while fixtures are
- * being loaded.
- * 
- * <p>
- * Not expected to be used by domain objects, but decouples the fixtures from
- * the framework (which provides the implementation of {@link org.apache.isis.applib.fixtures.switchuser.SwitchUserService}).
- */
-package org.apache.isis.applib.fixtures.switchuser;
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/Util.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/Util.java
deleted file mode 100644
index 80dd6de..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/Util.java
+++ /dev/null
@@ -1,51 +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.applib.layout;
-
-import javax.annotation.Nullable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-
-@Deprecated //[ahuber] class is package private, could not find any uses
-class Util {
-
-    private Util(){}
-
-    static <F,T> Predicate<F> is(final Class<T> cls) {
-        return new Predicate<F>() {
-            @Override public boolean apply(@Nullable final F from) {
-                return cls.isAssignableFrom(from.getClass());
-            }
-        };
-    }
-
-    static <F, T extends F> CastFunction<F, T> cast(final Class<T> cls) {
-        return new CastFunction<>();
-    }
-
-    private static class CastFunction<F, T extends F> implements Function<F, T> {
-        @SuppressWarnings("unchecked") // class is deprecated
-		@Override
-        public final T apply(final F from) {
-            return (T) from;
-        }
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData_legacy.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData_legacy.java
deleted file mode 100644
index b29f284..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData_legacy.java
+++ /dev/null
@@ -1,40 +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.applib.layout.component;
-
-import java.util.function.Function;
-
-@Deprecated
-public class CollectionLayoutData_legacy {
-
-    @Deprecated //[ahuber] not used, or otherwise replace with java 8+ function variant
-    public static class Functions {
-        private Functions(){}
-
-        public static Function<CollectionLayoutData, String> id() {
-            return new Function<CollectionLayoutData, String>() {
-                @Override
-                public String apply(final CollectionLayoutData metadata) {
-                    return metadata.getId();
-                }
-            };
-        }
-    }
-	
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
deleted file mode 100644
index 7c3ed13..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService2.java
+++ /dev/null
@@ -1,28 +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.applib.services.background;
-
-/**
- * Persists a {@link org.apache.isis.schema.cmd.v1.CommandDto memento-ized} command such that it can be
- * executed asynchronously, for example through a Quartz scheduler.
- * @deprecated use BackgroundCommandService instead
- */
-@Deprecated
-public interface BackgroundCommandService2 extends BackgroundCommandService {
-
-    
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundService2.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundService2.java
deleted file mode 100644
index 7f68327..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/background/BackgroundService2.java
+++ /dev/null
@@ -1,28 +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.applib.services.background;
-
-/**
- * Submit actions to be invoked in the background.
- * @deprecated use BackgroundService instead
- * 
- */
-@Deprecated
-public interface BackgroundService2 extends BackgroundService {
-   
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstractLegacy.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstractLegacy.java
deleted file mode 100644
index f39e942..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstractLegacy.java
+++ /dev/null
@@ -1,178 +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.applib.services.exceprecog;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.i18n.TranslatableString;
-import org.apache.isis.applib.services.i18n.TranslationService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Throwables;
-
-/**
- * Abstract implementation of {@link ExceptionRecognizer} that looks 
- * exceptions meeting the {@link Predicate} supplied in the constructor
- * and, if found anywhere in the {@link Throwables#getCausalChain(Throwable) causal chain},
- * then returns a non-null message indicating that the exception has been recognized.
- * 
- * <p>
- * If a messaging-parsing {@link Function} is provided through the constructor,
- * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
- * 
- * @deprecated use {@link ExceptionRecognizerAbstract} instead. (Will not be removed before Version 2.1.)   
- * (Requires you to refactor Guava Predicates, Functions, ... to Java Predicates, Functions, ... in your domain code.)
- * 
- */
-@Deprecated // (Will not be removed before Version 2.1.)
-public abstract class ExceptionRecognizerAbstractLegacy implements ExceptionRecognizer {
-
-    public static final Logger LOG = LoggerFactory.getLogger(ExceptionRecognizerAbstractLegacy.class);
-
-    /**
-     * Normally recognized exceptions are not logged (because they are expected and handled).  
-     * 
-     * <p>
-     * This key is primarily for diagnostic purposes, to log the exception regardless.
-     */
-    private static final String KEY_LOG_RECOGNIZED_EXCEPTIONS = "isis.services.exceprecog.logRecognizedExceptions";
-
-
-    /**
-     * Convenience for subclass implementations that always return a fixed message.
-     */
-    protected static Function<String, String> constant(final String message) {
-        return new Function<String, String>() {
-
-            @Override
-            public String apply(String input) {
-                return message;
-            }
-        };
-    }
-
-    /**
-     * Convenience for subclass implementations that always prefixes the exception message
-     * with the supplied text
-     */
-    protected static Function<String, String> prefix(final String prefix) {
-        return new Function<String, String>() {
-
-            @Override
-            public String apply(String input) {
-                return prefix + ": " + input;
-            }
-        };
-    }
-    
-    // //////////////////////////////////////
-
-
-    private final Category category;
-    private final Predicate<Throwable> predicate;
-    private final Function<String,String> messageParser;
-    
-    private boolean logRecognizedExceptions;
-
-    // //////////////////////////////////////
-
-
-    // -- GUAVA LEGACY
-    
-    public ExceptionRecognizerAbstractLegacy(final Category category, 
-    		com.google.common.base.Predicate<Throwable> predicate, 
-    		final com.google.common.base.Function<String,String> messageParser) {
-    	Objects.requireNonNull(predicate);
-        this.category = category;
-        this.predicate = predicate::apply;
-        this.messageParser = messageParser != null ? messageParser::apply : Function.identity();
-    }
-
-    public ExceptionRecognizerAbstractLegacy(
-    		com.google.common.base.Predicate<Throwable> predicate, 
-    		final com.google.common.base.Function<String,String> messageParser) {
-        this(Category.OTHER, predicate, messageParser);
-    }
-
-    public ExceptionRecognizerAbstractLegacy(Category category, com.google.common.base.Predicate<Throwable> predicate) {
-        this(category, predicate, null);
-    }
-
-    public ExceptionRecognizerAbstractLegacy(com.google.common.base.Predicate<Throwable> predicate) {
-        this(Category.OTHER, predicate);
-    }
-
-    // --
-    
-    @PostConstruct
-    public void init(Map<String, String> properties) {
-        final String prop = properties.get(KEY_LOG_RECOGNIZED_EXCEPTIONS);
-        this.logRecognizedExceptions = Boolean.parseBoolean(prop);
-    }
-
-    @PreDestroy
-    public void shutdown() {
-    }
-
-    // //////////////////////////////////////
-
-    @Programmatic
-    public String recognize(Throwable ex) {
-        List<Throwable> causalChain = Throwables.getCausalChain(ex);
-        for (Throwable throwable : causalChain) {
-            if(predicate.test(throwable)) {
-                if(logRecognizedExceptions) {
-                    LOG.info("Recognized exception, stacktrace : ", throwable);
-                }
-                if(ex instanceof TranslatableException) {
-                    final TranslatableException translatableException = (TranslatableException) ex;
-                    final TranslatableString translatableMessage = translatableException.getTranslatableMessage();
-                    final String translationContext = translatableException.getTranslationContext();
-                    if(translatableMessage != null && translationContext != null) {
-                        return translatableMessage.translate(translationService, translationContext);
-                    }
-                }
-                final Throwable rootCause = Throwables.getRootCause(throwable);
-                final String rootCauseMessage = rootCause.getMessage();
-                final String parsedMessage = messageParser.apply(rootCauseMessage);
-                return parsedMessage;
-            }
-        }
-        return null;
-    }
-
-    @Programmatic
-    @Override
-    public Recognition recognize2(Throwable ex) {
-        return Recognition.of(category, recognize(ex));
-    }
-
-    @javax.inject.Inject
-    protected TranslationService translationService;
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacy.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacy.java
deleted file mode 100644
index 593d14c..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacy.java
+++ /dev/null
@@ -1,148 +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.applib.services.exceprecog;
-
-import java.util.List;
-import javax.jdo.JDODataStoreException;
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.base.Throwables;
-
-/**
- * An specific implementation of {@link ExceptionRecognizer} that looks for an
- * exception of the type provided in the constructor
- * and, if found anywhere in the {@link Throwables#getCausalChain(Throwable) causal chain},
- * then returns a non-null message indicating that the exception has been recognized.
- * 
- * <p>
- * If a messaging-parsing {@link Function} is provided through the constructor,
- * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
- * 
- * @deprecated use {@link ExceptionRecognizerForType} instead. (Will not be removed before Version 2.1.)   
- * (Requires you to refactor Guava Predicates, Functions, ... to Java Predicates, Functions, ... in your domain code.)
- * 
- */
-@Deprecated // (Will not be removed before Version 2.1.)
-public class ExceptionRecognizerForTypeLegacy extends ExceptionRecognizerAbstractLegacy {
-
-    protected final static Predicate<Throwable> ofTypeExcluding(final Class<? extends Throwable> exceptionType, final String... messages) {
-        return Predicates.and(ofType(exceptionType), excluding(messages));
-    }
-
-    protected final static Predicate<Throwable> ofTypeIncluding(final Class<? extends Throwable> exceptionType, final String... messages) {
-        return Predicates.and(ofType(exceptionType), including(messages));
-    }
-    
-    protected final static Predicate<Throwable> ofType(final Class<? extends Throwable> exceptionType) {
-        return new Predicate<Throwable>() {
-            @Override
-            public boolean apply(Throwable input) {
-                return exceptionType.isAssignableFrom(input.getClass());
-            }
-        };
-    }
-    
-    /**
-     * A {@link Predicate} that {@link Predicate#apply(Object) applies} only if the message(s)
-     * supplied do <i>NOT</i> appear in the {@link Throwable} or any of its {@link Throwable#getCause() cause}s
-     * (recursively).
-     * 
-     * <p>
-     * Intended to prevent too eager matching of an overly general exception type.
-     */
-    protected final static Predicate<Throwable> excluding(final String... messages) {
-        return new Predicate<Throwable>() {
-            @Override
-            public boolean apply(Throwable input) {
-                final List<Throwable> causalChain = Throwables.getCausalChain(input);
-                for (String message : messages) {
-                    for (Throwable throwable : causalChain) {
-                        final String throwableMessage = throwable.getMessage();
-                        if(throwableMessage != null && throwableMessage.contains(message)) {
-                            return false;
-                        }
-                        if(throwable instanceof JDODataStoreException) {
-                            final JDODataStoreException jdoDataStoreException = (JDODataStoreException) throwable;
-                            final Throwable[] nestedExceptions = jdoDataStoreException.getNestedExceptions();
-                            for (Throwable nestedException : nestedExceptions) {
-                                final String nestedThrowableMessage = nestedException.getMessage();
-                                if(nestedThrowableMessage != null && nestedThrowableMessage.contains(message)) {
-                                    return false;
-                                }
-                            }
-                        }
-                    }
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * A {@link Predicate} that {@link Predicate#apply(Object) applies} only if at least one of the message(s)
-     * supplied <i>DO</i> appear in the {@link Throwable} or any of its {@link Throwable#getCause() cause}s
-     * (recursively).
-     * 
-     * <p>
-     * Intended to prevent more precise matching of a specific general exception type.
-     */
-    protected final static Predicate<Throwable> including(final String... messages) {
-        return new Predicate<Throwable>() {
-            @Override
-            public boolean apply(Throwable input) {
-                final List<Throwable> causalChain = Throwables.getCausalChain(input);
-                for (String message : messages) {
-                    for (Throwable throwable : causalChain) {
-                        final String throwableMessage = throwable.getMessage();
-                        if(throwableMessage != null && throwableMessage.contains(message)) {
-                            return true;
-                        }
-                    }
-                }
-                return false;
-            }
-        };
-    }
-
-    public ExceptionRecognizerForTypeLegacy(Category category, final Class<? extends Exception> exceptionType, final Function<String,String> messageParser) {
-        this(category, ofType(exceptionType), messageParser);
-    }
-    
-    public ExceptionRecognizerForTypeLegacy(Category category, final Predicate<Throwable> predicate, final Function<String,String> messageParser) {
-        super(category, predicate, messageParser);
-    }
-    
-    public ExceptionRecognizerForTypeLegacy(Category category, Class<? extends Exception> exceptionType) {
-        this(category, exceptionType, null);
-    }
-
-    public ExceptionRecognizerForTypeLegacy(final Class<? extends Exception> exceptionType, final Function<String,String> messageParser) {
-        this(Category.OTHER, exceptionType, messageParser);
-    }
-
-    public ExceptionRecognizerForTypeLegacy(final Predicate<Throwable> predicate, final Function<String,String> messageParser) {
-        this(Category.OTHER, predicate, messageParser);
-    }
-
-    public ExceptionRecognizerForTypeLegacy(Class<? extends Exception> exceptionType) {
-        this(Category.OTHER, exceptionType);
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/MementoService.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/MementoService.java
deleted file mode 100644
index 76de626..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/MementoService.java
+++ /dev/null
@@ -1,118 +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.applib.services.memento;
-
-import java.util.Set;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.iactn.InteractionContext;
-import org.apache.isis.applib.services.jaxb.JaxbService;
-
-/**
- * This service provides a mechanism by which a serializable memento of arbitrary state can be created.  Most
- * commonly this is in support of implementing the {@link org.apache.isis.applib.ViewModel} interface.
- *
- * <p>
- * Because an implementation of this service (<tt>MementoServiceDefault</tt>) is annotated with
- * {@link org.apache.isis.applib.annotation.DomainService} and is implemented in the core runtime, it is automatically
- * registered and available for use; no configuration is required.
- * </p>
- *
- * @deprecated - for view models, use JAXB annotations and the {@link JaxbService}; 
- * for action invocations and such like, use {@link InteractionContext} and {@link CommandContext}.
- */
-@Deprecated
-public interface MementoService {
-
-    /**
-     * @deprecated - because {@link MementoService} is deprecated.
-     */
-    @Deprecated
-    public static interface Memento {
-
-        /**
-         * @deprecated - because {@link MementoService} is deprecated.
-         */
-        @Deprecated
-        @Programmatic
-        public Memento set(String name, Object value);
-
-        /**
-         * @deprecated - because {@link MementoService} is deprecated.
-         */
-        @Deprecated
-        @Programmatic
-        public <T> T get(String name, Class<T> cls);
-
-        /**
-         * @deprecated - because {@link MementoService} is deprecated.
-         */
-        @Deprecated
-        @Programmatic
-        public String asString();
-
-        /**
-         * @deprecated - because {@link MementoService} is deprecated.
-         */
-        @Deprecated
-        public Set<String> keySet();
-    }
-    
-    /**
-     * Creates an empty {@link Memento}.
-     * 
-     * <p>
-     * Typically followed by {@link Memento#set(String, Object)} for each of the data values to
-     * add to the {@link Memento}, then {@link Memento#asString()} to convert to a string format.
-     *
-     * @deprecated - because {@link MementoService} is deprecated.
-     */
-    @Deprecated
-    @Programmatic
-    public Memento create();
-
-    /**
-     * Parse string returned from {@link Memento#asString()}
-     * 
-     * <p>
-     * Typically followed by {@link Memento#get(String, Class)} for each of the data values held
-     * in the {@link Memento}. 
-     *
-     * @deprecated - because {@link MementoService} is deprecated.
-     */
-    @Deprecated
-    @Programmatic
-    public Memento parse(final String str);
-
-    /**
-     * Whether the value can be provided &quot;as-is&quot; as an argument to {@link Memento#set(String, Object)},
-     * or whether it must be converted in some way.
-     * 
-     * <p>
-     * The intention here is that a {@link Memento} implementation should be able to accept most/all common value types
-     * (int, String, Date, BigDecimal etc), but will require entities to be converted into a serializable format,
-     * specifically, as a {@link Bookmark}.
-     *
-     * @deprecated - because {@link MementoService} is deprecated.
-     */
-    @Deprecated
-    @Programmatic
-    public boolean canSet(Object input);
-
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/package-info.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/package-info.java
deleted file mode 100644
index f91d26f..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/memento/package-info.java
+++ /dev/null
@@ -1,29 +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.
- */
-
-/**
- * The {@link org.apache.isis.applib.services.memento.MementoService} was originally introduced to simplify the
- * implementation of ViewModels which are required by the framework to return string representation of all of their
- * backing state, moreover which is safe for use within a URL. This usage is deprecated; use JAXB view models instead.
- *
- * @see <a href="http://isis.apache.org/guides/rgsvc/rgsvc.html#_rgsvc_integration-api_MementoService">Reference guide</a>
- *
- * @deprecated
- */
-package org.apache.isis.applib.services.memento;
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/repository/RepositoryServiceLegacy.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/repository/RepositoryServiceLegacy.java
deleted file mode 100644
index 9bf7118..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/repository/RepositoryServiceLegacy.java
+++ /dev/null
@@ -1,233 +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.applib.services.repository;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.query.Query;
-
-/**
- * Legacy interface to ease transition from Isis 1.x to 2.x.
- * 
- * @deprecated use {@link RepositoryService} instead. (Will not be removed before Version 2.1.)
- * (Requires you to refactor Guava Predicates to Java Predicates in your domain code.)
- * 
- */
-@Deprecated // (Will not be removed before Version 2.1.)
-public interface RepositoryServiceLegacy {
-
-    /**
-     * Normally any queries are automatically preceded by flushing pending executions.
-     *
-     * <p>
-     * This key allows this behaviour to be disabled.
-     *
-     * <p>
-     *     Originally introduced as part of ISIS-1134 (fixing memory leaks in the objectstore)
-     *     where it was found that the autoflush behaviour was causing a (now unrepeatable)
-     *     data integrity error (see <a href="https://issues.apache.org/jira/browse/ISIS-1134?focusedCommentId=14500638&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14500638">ISIS-1134 comment</a>, in the isis-module-security.
-     *     However, that this could be circumvented by removing the call to flush().
-     *     We don't want to break existing apps that might rely on this behaviour, on the
-     *     other hand we want to fix the memory leak.  Adding this configuration property
-     *     seems the most prudent way forward.
-     * </p>
-     */
-    String KEY_DISABLE_AUTOFLUSH = "isis.services.container.disableAutoFlush";
-
-    /**
-     * Same as {@link org.apache.isis.applib.services.factory.FactoryService#instantiate(Class)}; provided as a
-     * convenience because instantiating and {@link #persist(Object) persisting} are often done together.
-     */
-    @Programmatic
-    <T> T instantiate(final Class<T> ofType);
-
-    /**
-     * Determines if the specified object is persistent (that it is stored permanently outside of the virtual machine
-     * in the object store).
-     */
-    @Programmatic
-    boolean isPersistent(Object domainObject);
-
-    /**
-     * Persist the specified object (or do nothing if already persistent).
-     *
-     * <p>
-     * It is recommended that the object be initially instantiated using
-     * {@link org.apache.isis.applib.DomainObjectContainer#newTransientInstance(Class)}.  However, the framework will also
-     * handle the case when the object is simply <i>new()</i>ed up.
-     *
-     * @see org.apache.isis.applib.DomainObjectContainer#newTransientInstance(Class)
-     * @see #isPersistent(Object)
-     */
-    @Programmatic
-    <T> T persist(T domainObject);
-    
-    /**
-     * Persist the specified object (or do nothing if already persistent) and flushes changes to the database.
-     *
-     * @see #persist(Object)
-     */
-    @Programmatic
-    <T> T persistAndFlush(T domainObject);
-
-    /**
-     * Deletes the domain object but only if is persistent.
-     *
-     * @param domainObject
-     */
-    @Programmatic
-    void remove(Object domainObject);
-
-    /**
-     * Deletes the domain object but only if is persistent, and flushes changes to the database.
-     *
-     * @param domainObject
-     */
-    @Programmatic
-    void removeAndFlush(Object domainObject);
-
-    /**
-     * Returns all the instances of the specified type (including subtypes).
-     * If the optional range parameters are used, the dataset returned starts
-     * from (0 based) index, and consists of only up to count items.
-     *
-     * <p>
-     * If there are no instances the list will be empty. This method creates a
-     * new {@link List} object each time it is called so the caller is free to
-     * use or modify the returned {@link List}, but the changes will not be
-     * reflected back to the repository.
-     * </p>
-     *
-     * <p>
-     * This method should only be called where the number of instances is known
-     * to be relatively low, unless the optional range parameters (2 longs) are
-     * specified. The range parameters are "start" and "count".
-     * </p>
-     *
-     * @param range 2 longs, specifying 0-based start and count.
-     */
-    @Programmatic
-    <T> List<T> allInstances(Class<T> ofType, long... range);
-
-    /**
-     * Returns all the instances of the specified type (including subtypes) that
-     * the predicate object accepts. If the optional range parameters are used, the
-     * dataset returned starts from (0 based) index, and consists of only up to
-     * count items.
-     *
-     * <p>
-     * If there are no instances the list will be empty. This method creates a
-     * new {@link List} object each time it is called so the caller is free to
-     * use or modify the returned {@link List}, but the changes will not be
-     * reflected back to the repository.
-     * </p>
-     *
-     * <p>
-     * This method is useful during exploration/prototyping, but - because the filtering is performed client-side -
-     * this method is only really suitable for initial development/prototyping, or for classes with very few
-     * instances.  Use {@link #allMatches(Query)} for production code.
-     * </p>
-     *
-     * @see #allMatches(Class, Predicate, long...)
-     *
-     * @param range 2 longs, specifying 0-based start and count.
-     * @deprecated will be removed, use drop in replacement {@link #allMatches(Class, Predicate, long...)}
-     * utilizing java.util.function.Predicate 
-     */
-    @Programmatic @Deprecated //TODO ISIS-1827 remove guava from public API
-    <T> List<T> allMatches(final Class<T> ofType, final com.google.common.base.Predicate<? super T> predicate, long... range);
-    
-    /**
-     * Returns all the instances that match the given {@link Query}.
-     *
-     * <p>
-     * If there are no instances the list will be empty. This method creates a
-     * new {@link List} object each time it is called so the caller is free to
-     * use or modify the returned {@link List}, but the changes will not be
-     * reflected back to the repository.
-     * </p>
-     *
-     * <p>
-     *     This method is the recommended way of querying for multiple instances.
-     * </p>
-     */
-    @Programmatic
-    <T> List<T> allMatches(Query<T> query);
-
-    /**
-     * Returns the first instance of the specified type (including subtypes)
-     * that matches the supplied {@link Predicate}, or <tt>null</tt> if none.
-     *
-     * <p>
-     * This method is useful during exploration/prototyping, but - because the filtering is performed client-side -
-     * this method is only really suitable for initial development/prototyping, or for classes with very few
-     * instances.  Use {@link #firstMatch(Query)} for production code.
-     * </p>
-     *
-     * @deprecated - use {@link #uniqueMatch(Class, Predicate)} or {@link #allMatches(Class, Predicate, long...)}
-     */
-    @Deprecated //TODO ISIS-1827 remove guava from public API 
-    @Programmatic 
-    <T> T firstMatch(final Class<T> ofType, final com.google.common.base.Predicate<T> predicate);
-
-    /**
-     * Returns the first instance that matches the supplied query, or <tt>null</tt> if none.
-     *
-     * <p>
-     *     This method is the recommended way of querying for an instance when one or more may match.  See also
-     *     {@link #uniqueMatch(Query)}.
-     * </p>
-     *
-     * @see #uniqueMatch(Query)
-     *
-     * @deprecated - use {@link #uniqueMatch(Query)} or {@link #allMatches(Query)}.
-     */
-    @Deprecated
-    @Programmatic
-    <T> T firstMatch(Query<T> query);
-    
-    /**
-     * @deprecated will be removed, use drop in replacement {@link #uniqueMatch(Class, Predicate)}
-     * utilizing java.util.function.Predicate 
-     */
-    @Programmatic @Deprecated //TODO ISIS-1827 remove guava from public API 
-    <T> T uniqueMatch(final Class<T> ofType, final com.google.common.base.Predicate<T> predicate);
-
-
-    /**
-     * Find the only instance that matches the provided query.
-     *
-     * <p>
-     * If no instance is found then null will be return, while if there is more
-     * that one instances a run-time exception will be thrown.
-     * </p>
-     *
-     * <p>
-     *     This method is the recommended way of querying for (precisely) one instance.  See also {@link #allMatches(Query)}
-     * </p>
-     *
-     * @see #firstMatch(Query)
-     */
-    @Programmatic
-    <T> T uniqueMatch(Query<T> query);
-
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingWithSupportForLargeUrlsAbstract.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingWithSupportForLargeUrlsAbstract.java
deleted file mode 100644
index b09cdb0..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingWithSupportForLargeUrlsAbstract.java
+++ /dev/null
@@ -1,87 +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.applib.services.urlencoding;
-
-import java.util.UUID;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Maps;
-
-/**
- * to use, subclass and annotated with:
- * <pre>
- * &#064;DomainService(nature=DOMAIN, menuOrder="100")
- * </pre>
- */
-@Deprecated // [ahuber] why not use variant with compression ?
-public abstract class UrlEncodingServiceUsingBaseEncodingWithSupportForLargeUrlsAbstract 
-extends UrlEncodingServiceUsingBaseEncodingAbstract {
-
-    /**
-     * Strings under this length are not cached, just returned as is.
-     */
-    private static final int MIN_LENGTH_TO_CACHE = 500;
-    /**
-     * Used to distinguish which strings represent keys in the cache, versus those not cached.
-     */
-    private static final String KEY_PREFIX = "______";
-
-    private static final int EXPECTED_SIZE = 1000;
-
-    // this is a naive implementation that will leak memory
-    private final BiMap<String, String> cachedValueByKey =
-            Maps.synchronizedBiMap(HashBiMap.<String, String>create(EXPECTED_SIZE));
-
-    @Override
-    public String encodeString(final String value) {
-        if(!canCache(value)) {
-            return super.encodeString(value);
-        }
-
-        synchronized (cachedValueByKey) {
-            String key = cachedValueByKey.inverse().get(value);
-            if (key == null) {
-                key = newKey();
-                cachedValueByKey.put(key, value);
-            }
-            return KEY_PREFIX + key;
-        }
-    }
-
-    @Override
-    public String decodeToString(final String key) {
-        if(key == null || !key.startsWith(KEY_PREFIX)) {
-            return super.decodeToString(key);
-        }
-        String keySuffix = key.substring(KEY_PREFIX.length());
-        return cachedValueByKey.get(keySuffix);
-    }
-
-    /**
-     * Factored out to allow easy subclassing.
-     */
-    protected String newKey() {
-        return UUID.randomUUID().toString();
-    }
-
-    private boolean canCache(final String key) {
-        return key != null && key.length() > MIN_LENGTH_TO_CACHE;
-    }
-
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/Clause.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/Clause.java
deleted file mode 100644
index e718aab..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/Clause.java
+++ /dev/null
@@ -1,125 +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.applib.util;
-
-import java.lang.reflect.Method;
-import java.util.Comparator;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.isis.commons.internal.base._Strings;
-
-class Clause {
-    private static Pattern pattern = Pattern.compile("\\W*(\\w+)\\W*(asc|asc nullsFirst|asc nullsLast|desc|desc nullsFirst|desc nullsLast)?\\W*");
-    enum Direction {
-        ASC {
-            @Override
-            public Comparator<Comparable<?>> getOrdering() {
-            	// legacy of Ordering.natural().nullsFirst();
-            	return Comparator.nullsFirst(Comparator.<Comparable>naturalOrder());
-            }
-        },
-        ASC_NULLS_LAST {
-            @Override
-            public Comparator<Comparable<?>> getOrdering() {
-                // legacy of Ordering.natural().nullsLast();
-            	return Comparator.nullsLast(Comparator.<Comparable>naturalOrder());
-            }
-        },
-        DESC {
-            @Override
-            public Comparator<Comparable<?>> getOrdering() {
-                // legacy of Ordering.natural().nullsLast().reverse();
-            	return ASC_NULLS_LAST.getOrdering().reversed();
-            }
-        },
-        DESC_NULLS_LAST {
-            @Override
-            public Comparator<Comparable<?>> getOrdering() {
-                // legacy of Ordering.natural().nullsFirst().reverse();
-            	return ASC.getOrdering().reversed();
-            }
-        };
-
-        public abstract Comparator<Comparable<?>> getOrdering();
-
-        public static Direction valueOfElseAsc(String str) {
-            if("asc".equals(str)) return ASC;
-            if("asc nullsFirst".equals(str)) return ASC;
-            if("asc nullsLast".equals(str)) return ASC_NULLS_LAST;
-            if("desc".equals(str)) return DESC;
-            if("desc nullsFirst".equals(str)) return DESC;
-            if("desc nullsLast".equals(str)) return DESC_NULLS_LAST;
-            return ASC;
-        }
-    }
-    private String propertyName;
-    private Direction direction;
-    static Clause parse(String input) {
-        final Matcher matcher = pattern.matcher(input);
-        if(!matcher.matches()) {
-            return null;
-        }
-        return new Clause(matcher.group(1), Direction.valueOfElseAsc(matcher.group(2)));
-    }
-    Clause(String propertyName, Direction direction) {
-        this.propertyName = propertyName;
-        this.direction = direction;
-    }
-    String getPropertyName() {
-        return propertyName;
-    }
-    Direction getDirection() {
-        return direction;
-    }
-    public Object getValueOf(Object obj) {
-        if(obj == null) {
-            return null;
-        }
-        final String methodNameSuffix = upperFirst(propertyName);
-        final String getMethodName = "get" + methodNameSuffix;
-        try {
-            final Method getterMethod = obj.getClass().getMethod(getMethodName);
-            return getterMethod.invoke(obj);
-        } catch (NoSuchMethodException e) {
-            final String isMethodName = "is" + methodNameSuffix;
-            try {
-                final Method getterMethod = obj.getClass().getMethod(isMethodName);
-                return getterMethod.invoke(obj);
-            } catch (NoSuchMethodException ex) {
-                throw new IllegalArgumentException("No such method ' " + getMethodName + "' or '" + isMethodName + "'", e);
-            } catch (Exception e1) {
-                // some other reason; for example, a JDOUserException if the object has been deleted and interaction with its properties is not permitted.
-                throw new RuntimeException(e1);
-            }
-        } catch (Exception e) {
-            // some other reason; for example, a JDOUserException if the object has been deleted and interaction with its properties is not permitted.
-            throw new RuntimeException(e);
-        }
-    }
-    private static String upperFirst(final String str) {
-        if (_Strings.isNullOrEmpty(str)) {
-            return str;
-        }
-        if (str.length() == 1) {
-            return str.toUpperCase();
-        }
-        return str.substring(0, 1).toUpperCase() + str.substring(1);
-    }
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/ObjectContractsLegacy.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/ObjectContractsLegacy.java
deleted file mode 100644
index 02af346..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/util/ObjectContractsLegacy.java
+++ /dev/null
@@ -1,286 +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.applib.util;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.collections._Lists;
-
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Ordering;
-
-public class ObjectContractsLegacy {
-
-    // -- compare
-
-    /**
-     * Evaluates which of p and q is first.
-     *
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #compare(Object, Object, String...) varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public static <T> int compare(final T p, final T q, final String propertyNames) {
-        final Iterable<String> propertyNamesIter = csvToIterable(propertyNames);
-        return compare(p, q, propertyNamesIter);
-    }
-
-    /**
-     * Evaluates which of p and q is first.
-     *
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public static <T> int compare(final T p, final T q, final String... propertyNames) {
-        final Iterable<String> propertyNamesIter = varargsToIterable(propertyNames);
-        return compare(p, q, propertyNamesIter);
-    }
-
-    private static <T> int compare(final T p, final T q, final Iterable<String> propertyNamesIter) {
-        if(p == null) { return -1;}
-        if(q == null) { return +1;}
-        if(p.getClass() != q.getClass()) {
-            // just sort on the class type
-            return Ordering.natural().onResultOf((Function<Object, String>) o -> o.getClass().getSimpleName()).compare(p, q);
-        }
-
-        final Iterable<Clause> clauses = clausesFor(propertyNamesIter);
-        ComparisonChain chain = ComparisonChain.start();
-        for (final Clause clause : clauses) {
-            final Comparable<T> propertyValueOfP = _Casts.uncheckedCast(clause.getValueOf(p));
-            final Comparable<T> propertyValueOfQ = _Casts.uncheckedCast(clause.getValueOf(q));
-            chain = chain.compare(propertyValueOfP, propertyValueOfQ, clause.getDirection().getOrdering());
-        }
-        return chain.result();
-    }
-    
-
-    // -- compareBy
-    /**
-     * Returns a {@link Comparator} to evaluate objects by their property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #compareBy(String...)} varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public static <T> Comparator<T> compareBy(final String propertyNames){
-        return (p, q) -> compare(p, q, propertyNames);
-    }
-    /**
-     * Returns a {@link Comparator} to evaluate objects by their property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public static <T> Comparator<T> compareBy(final String... propertyNames){
-        return (p, q) -> compare(p, q, propertyNames);
-    }
-    
-
-    // -- toString
-
-    /**
-     * Returns a string representation of the object consisting of the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #toString(Object, String...)} varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public static String toString(Object p, String propertyNames) {
-        return new ObjectContractsLegacy().toStringOf(p, propertyNames);
-    }
-    /**
-     * Returns a string representation of the object consisting of the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public static String toString(Object p, String... propertyNames) {
-        return new ObjectContractsLegacy().toStringOf(p, propertyNames);
-    }
-    
-
-    // -- hashCode
-    /**
-     * Returns the hashCode for the object using the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #hashCode(Object, String...)} varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public static int hashCode(Object obj, String propertyNames) {
-        final Iterable<String> propertyNamesIter = csvToIterable(propertyNames);
-        return hashCode(obj, propertyNamesIter);
-    }
-
-    /**
-     * Returns the hashCode for the object using the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public static int hashCode(Object obj, String... propertyNames) {
-        final Iterable<String> propertyNamesIter = varargsToIterable(propertyNames);
-        return hashCode(obj, propertyNamesIter);
-    }
-
-    private static int hashCode(final Object obj, final Iterable<String> propertyNamesIter) {
-        final List<Object> propertyValues = _Lists.newArrayList();
-        for (final Clause clause : clausesFor(propertyNamesIter)) {
-            final Object propertyValue = clause.getValueOf(obj);
-            if(propertyValue != null) {
-                propertyValues.add(propertyValue);
-            }
-        }
-        return Objects.hashCode(propertyValues.toArray());
-    }
-    
-
-    // -- equals
-
-    /**
-     * Returns whether two objects are equal, considering just the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #equals(Object, Object, String...)} varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public static boolean equals(Object p, Object q, String propertyNames) {
-        if(p==null && q==null) {
-            return true;
-        }
-        if(p==null || q==null) {
-            return false;
-        }
-        if(p.getClass() != q.getClass()) {
-            return false;
-        }
-        final Iterable<String> propertyNamesIter = csvToIterable(propertyNames);
-        return equals(p, q, propertyNamesIter);
-    }
-
-    /**
-     * Returns whether two objects are equal, considering just the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public static boolean equals(Object p, Object q, String... propertyNames) {
-        if(p==null && q==null) {
-            return true;
-        }
-        if(p==null || q==null) {
-            return false;
-        }
-        if(p.getClass() != q.getClass()) {
-            return false;
-        }
-        final Iterable<String> propertyNamesIter = varargsToIterable(propertyNames);
-        return equals(p, q, propertyNamesIter);
-    }
-
-    private static boolean equals(final Object p, final Object q, final Iterable<String> propertyNamesIter) {
-        final Iterable<Clause> clauses = clausesFor(propertyNamesIter);
-        for (final Clause clause : clauses) {
-            final Object pValue = clause.getValueOf(p);
-            final Object qValue = clause.getValueOf(q);
-            if(!Objects.equal(pValue, qValue)) {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-
-    // -- helpers
-    private static Iterable<Clause> clausesFor(final Iterable<String> iterable) {
-        return _NullSafe.stream(iterable)
-        		.map(Clause::parse)
-        		.collect(Collectors.toList());
-    }
-
-    private static Iterable<String> csvToIterable(final String propertyNames) {
-        return _Strings.splitThenStream(propertyNames, ",")
-        		.collect(Collectors.toList());
-    }
-
-    private static List<String> varargsToIterable(final String[] iterable) {
-        return Arrays.asList(iterable);
-    }
-    
-
-    // -- toStringOf
-
-    public interface ToStringEvaluator {
-        boolean canEvaluate(Object o);
-        String evaluate(Object o);
-    }
-    
-    private final List<ToStringEvaluator> evaluators = _Lists.newArrayList();
-
-    public ObjectContractsLegacy with(ToStringEvaluator evaluator) {
-        evaluators.add(evaluator);
-        return this;
-    }
-
-    /**
-     * Returns a string representation of two objects, considering just the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #toString(Object, String...)} varargs} overloaded version of this method.
-     */
-    @Deprecated
-    public String toStringOf(Object p, String propertyNames) {
-        final Iterable<String> propertyNamesIter = csvToIterable(propertyNames);
-        return toStringOf(p, propertyNamesIter);
-    }
-
-    /**
-     * Returns a string representation of two objects, considering just the specified property name(s).
-     * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
-     */
-    @Deprecated
-    public String toStringOf(Object p, String... propertyNames) {
-        final Iterable<String> propertyNamesIter = varargsToIterable(propertyNames);
-        return toStringOf(p, propertyNamesIter);
-    }
-
-    private String toStringOf(final Object p, final Iterable<String> propertyNamesIter) {
-        final ToStringHelper stringHelper = Objects.toStringHelper(p);
-        for (final Clause clause : clausesFor(propertyNamesIter)) {
-            stringHelper.add(clause.getPropertyName(), asString(clause, p));
-        }
-        return stringHelper.toString();
-    }
-
-    private String asString(final Clause clause, Object p) {
-        final Object value = clause.getValueOf(p);
-        if(value == null) {
-            return null;
-        }
-        for (ToStringEvaluator evaluator : evaluators) {
-            if(evaluator.canEvaluate(value)) {
-                return evaluator.evaluate(value);
-            }
-        }
-        return value.toString();
-    }
-
-    
-
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Date.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Date.java
deleted file mode 100644
index ec08f97..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Date.java
+++ /dev/null
@@ -1,297 +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.applib.value;
-
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeFieldType;
-import org.joda.time.Period;
-import org.joda.time.format.DateTimeFormat;
-
-import org.apache.isis.applib.Defaults;
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.clock.Clock;
-
-/**
- * Value object representing a date (not time) value.
- * 
- * <p>
- * TODO: other methods to implement comparison methods:
- * <ul>
- * <li>sameDateAs() day == day & month == month & year == year</li>
- * <li>withinNextDatePeriod(int days, int months, int years)</li>
- * <li>withinDatePeriod(int days, int months, int years)</li>
- * <li>withinPreviousDatePeriod(int days, int months, int years)</li>
- * </ul>
- *
- * @deprecated
- */
-@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.date.DateValueSemanticsProvider")
-@Deprecated
-public class Date extends Magnitude<Date> {
-    private static final long serialVersionUID = 1L;
-    private final DateTime date;
-
-    /**
-     * Create a Date object for today's date.
-     */
-    public Date() {
-        final DateTime time = Clock.getTimeAsDateTime().withTime(0, 0, 0, 0);
-        date = new DateTime(time, Defaults.getTimeZone());
-    }
-
-    /**
-     * Create a Date object set to the specified day, month and year.
-     */
-    public Date(final int year, final int month, final int day) {
-        checkDate(year, month, day);
-        date = newDateTime(year, month, day);
-    }
-
-    /**
-     * Create a Date object based on the specified Java date object. The time
-     * portion of the Java date is disposed of.
-     */
-    public Date(final java.util.Date date) {
-        this.date = new DateTime(date.getTime(), Defaults.getTimeZone());
-    }
-
-    public Date(final long millisSinceEpoch) {
-        this.date = new DateTime(millisSinceEpoch);
-    }
-
-    public Date(final DateTime date) {
-        this.date = new DateTime(date);
-    }
-
-    private DateTime newDateTime(final int year, final int month, final int day) {
-        return new DateTime(year, month, day, 0, 0, 0, 0, Defaults.getTimeZone());
-    }
-
-    protected Date createDate(final DateTime date) {
-        final Date newDate = new Date(date);
-        return newDate;
-    }
-
-    /**
-     * Add the specified days, years and months to this date value and return a
-     * new date object containing the result.
-     */
-    public Date add(final int years, final int months, final int days) {
-        final Period add = new Period(years, months, 0, days, 0, 0, 0, 0);
-        final DateTime newDate = date.plus(add);
-        return new Date(newDate);
-    }
-
-    private void checkDate(final int year, final int month, final int day) {
-        if ((month < 1) || (month > 12)) {
-            throw new IllegalArgumentException("Month must be in the range 1 - 12 inclusive");
-        }
-        final DateTime newDate = newDateTime(year, month, 1);
-        final int lastDayOfMonth = newDate.dayOfMonth().getMaximumValue();
-        ;
-        if ((day < 1) || (day > lastDayOfMonth)) {
-            throw new IllegalArgumentException("Day must be in the range 1 - " + lastDayOfMonth + " inclusive: " + day);
-        }
-    }
-
-    /**
-     * Return this date value as a Java Date object.
-     * 
-     * @see java.util.Date
-     */
-    public java.util.Date dateValue() {
-        final java.util.Date javaDate = date.toDate();
-        return javaDate;
-    }
-
-    /**
-     * 
-     * @return the milliseconds from 1970-01-01T00:00:00Z
-     */
-    public long getMillisSinceEpoch() {
-        return date.getMillis();
-    }
-
-    /**
-     * Calculates, and returns, a date representing the last day of the month
-     * relative to the current date.
-     * 
-     * @author Joshua Cassidy
-     */
-    public Date endOfMonth() {
-        return new Date(date.dayOfMonth().withMaximumValue());
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (!(o instanceof Date)) {
-            return false;
-        }
-        final Date date1 = (Date) o;
-        if (!date.equals(date1.date)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return date.hashCode();
-    }
-
-    /**
-     * Return the day from this date, in the range 1 - 31.
-     */
-    public int getDay() {
-        return date.getDayOfMonth();
-    }
-
-    /**
-     * Calculates, and returns, an int representing the day of the week relative
-     * to the current date. With Mon = 0 through to Sun = 6
-     * 
-     * @author Joshua Cassidy
-     */
-    public int getDayOfWeek() {
-        return date.getDayOfWeek() - 1; // Mon - Sun == 1 - 7
-    }
-
-    /**
-     * Return the month from this date, in the range 1 - 12.
-     */
-    public int getMonth() {
-        return date.getMonthOfYear();
-    }
-
-    /**
-     * Return the year from this date.
-     */
-    public int getYear() {
-        return date.getYear();
-    }
-
-    /**
-     * Returns true if the date of this object has the same value as the
-     * specified date
-     */
-    @Override
-    public boolean isEqualTo(final Date date) {
-        return this.date.equals((date).date);
-    }
-
-    /**
-     * Returns true if the time of this object is earlier than the specified
-     * time
-     */
-    @Override
-    public boolean isLessThan(final Date date) {
-        return this.date.isBefore((date).date);
-    }
-
-    private boolean sameAs(final Date as, final DateTimeFieldType field) {
-
-        return date.get(field) == as.date.get(field);
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same day of
-     * the month, eg both dates are for the 3rd.
-     */
-    public boolean sameDayOfMonthAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.dayOfMonth());
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same day of
-     * the week, eg both dates are on a Tuesday.
-     */
-    public boolean sameDayOfWeekAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.dayOfWeek());
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same day of
-     * the year, eg both dates are for the 108th day of the year.
-     */
-    public boolean sameDayOfYearAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.dayOfYear());
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same month,
-     * eg both dates are for the March.
-     */
-    public boolean sameMonthAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.monthOfYear());
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same week in
-     * the year, eg both dates are the for the 18th week of the year.
-     */
-    public boolean sameWeekAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.weekOfWeekyear());
-    }
-
-    /**
-     * Determines if this date and the specified date represent the same year.
-     */
-    public boolean sameYearAs(final Date as) {
-        return sameAs(as, DateTimeFieldType.year());
-    }
-
-    /**
-     * Calculates, and returns, a date representing the first day of the month
-     * relative to the current date.
-     */
-    public Date startOfMonth() {
-        return new Date(date.dayOfMonth().withMinimumValue());
-    }
-
-    /**
-     * Calculates, and returns, a date representing the first day of the week
-     * relative to the current date.
-     */
-    public Date startOfWeek() {
-        return new Date(date.dayOfWeek().withMinimumValue());
-    }
-
-    /**
-     * Calculates, and returns, a date representing the first day of the year
-     * relative to the current date.
-     */
-    public Date startOfYear() {
-        return new Date(date.dayOfYear().withMinimumValue());
-    }
-
-    public String title() {
-        return DateTimeFormat.mediumDate().print(date);
-    }
-
-    @Override
-    public String toString() {
-        // return getYear() + "-" + getMonth() + "-" + getDay();
-        return String.format("%04d-%02d-%02d", getYear(), getMonth(), getDay());
-
-    }
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/DateTime.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/DateTime.java
deleted file mode 100644
index 5fffc44..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/DateTime.java
+++ /dev/null
@@ -1,314 +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.applib.value;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-import org.joda.time.DateTimeZone;
-import org.joda.time.Period;
-
-import org.apache.isis.applib.Defaults;
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.clock.Clock;
-
-/**
- * Value object representing a date and time value. By default, the time is
- * initialised to the current time, unless otherwise specified.
- *
- * @deprecated
- */
-@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.datetime.DateTimeValueSemanticsProvider")
-@Deprecated
-public class DateTime extends Magnitude<DateTime> {
-
-    private static final long serialVersionUID = 1L;
-    private final org.joda.time.DateTime dateTime;
-
-    /**
-     * Create a Time object for storing a timeStamp set to the current time.
-     */
-    public DateTime() {
-        final org.joda.time.DateTime d = new org.joda.time.DateTime(Clock.getTime(), Defaults.getTimeZone());
-        // dateTime = d.secondOfMinute().setCopy(0);
-        dateTime = d;
-    }
-
-    /**
-     * Create a DateTime from the provided java.util.Date, assuming that the
-     * date is in UTC. If not, see {@link DateTime#}
-     * 
-     * @param date
-     */
-    public DateTime(final Date date) {
-        this.dateTime = new org.joda.time.DateTime(date, Defaults.getTimeZone());
-    }
-
-    public DateTime(final long millisSinceEpoch) {
-        this.dateTime = new org.joda.time.DateTime(millisSinceEpoch, Defaults.getTimeZone());
-    }
-
-    public DateTime(final Date date, final TimeZone timeZone) {
-        final DateTimeZone tz = DateTimeZone.forTimeZone(timeZone);
-        this.dateTime = new org.joda.time.DateTime(date, tz);
-    }
-
-    public DateTime(final org.joda.time.DateTime dateTime) {
-        this.dateTime = new org.joda.time.DateTime(dateTime);
-    }
-
-    /**
-     * Creates a DateTime on the specified day/month/year, with the current time
-     */
-    public DateTime(final int year, final int month, final int day) {
-        final Time time = new Time();
-        // this(year, month, day, time.getHour(), time.getMinute(), 0);
-
-        // replace below with something more like the above..
-        checkTime(year, month, day, 0, 0);
-        dateTime = new org.joda.time.DateTime(year, month, day, time.getHour(), time.getMinute(), time.getSecond(), 0, Defaults.getTimeZone());
-    }
-
-    /**
-     * Create a Date object set to the specified day, month, year, hour, minute.
-     */
-    public DateTime(final int year, final int month, final int day, final int hour, final int minute) {
-        this(year, month, day, hour, minute, 0);
-    }
-
-    /**
-     * Create a Date object set to the specified day, month, year, hour, minute,
-     * and second.
-     */
-    public DateTime(final int year, final int month, final int day, final int hour, final int minute, final int second) {
-        checkTime(year, month, day, hour, minute);
-        dateTime = new org.joda.time.DateTime(year, month, day, hour, minute, second, 0, Defaults.getTimeZone());
-    }
-
-    private void checkTime(final int year, final int month, final int day, final int hour, final int minute) {
-        if ((month < 1) || (month > 12)) {
-            throw new IllegalArgumentException("Month must be in the range 1 - 12 inclusive " + month);
-        }
-
-        final org.joda.time.DateTime dateTime = new org.joda.time.DateTime(year, month, 1, 0, 0, 0, 0);
-        final int lastDayOfMonth = dateTime.dayOfMonth().getMaximumValue();
-
-        if ((day < 1) || (day > lastDayOfMonth)) {
-            throw new IllegalArgumentException("Day must be in the range 1 - " + lastDayOfMonth + " inclusive " + day);
-        }
-
-        if ((hour < 0) || (hour > 23)) {
-            throw new IllegalArgumentException("Hour must be in the range 0 - 23 inclusive " + hour);
-        }
-
-        if ((minute < 0) || (minute > 59)) {
-            throw new IllegalArgumentException("Minute must be in the range 0 - 59 inclusive " + minute);
-        }
-    }
-
-    /**
-     * Add the specified time period to this date value.
-     */
-    public DateTime add(final int years, final int months, final int days, final int hours, final int minutes) {
-        final Period period = new Period(years, months, 0, days, hours, minutes, 0, 0);
-        final org.joda.time.DateTime dateTime = this.dateTime.plus(period);
-        return new DateTime(dateTime);
-    }
-
-    /**
-     * Add the specified days, years and months to this date value.
-     */
-    public DateTime add(final int years, final int months, final int days) {
-        return add(years, months, days, 0, 0);
-    }
-
-    public Calendar calendarValue() {
-        return dateTime.toGregorianCalendar();
-    }
-
-    protected DateTime createDateTime(final Date date) {
-        return new DateTime(date);
-    }
-
-    /**
-     * Be careful - the TimeZone of the java.util.Date is based on the system
-     * default.
-     */
-    public java.util.Date dateValue() {
-        return new Date(dateTime.getMillis());
-    }
-
-    /**
-     * 
-     * @return the milliseconds from 1970-01-01T00:00:00Z
-     */
-    public long getMillisSinceEpoch() {
-        return dateTime.getMillis();
-    }
-    
-    public int getSeconds() {
-        return dateTime.getSecondOfMinute();
-    }
-
-    public int getMinute() {
-        return dateTime.getMinuteOfHour();
-    }
-
-    public int getHour() {
-        return dateTime.getHourOfDay();
-    }
-
-    public int getDay() {
-        return dateTime.getDayOfMonth();
-    }
-
-    public int getMonth() {
-        return dateTime.getMonthOfYear();
-    }
-
-    public int getYear() {
-        return dateTime.getYear();
-    }
-
-    /**
-     * Day of year (1 to 365 [366 in leap years]) for Gregorian calendar.
-     * 
-     * @return
-     */
-    public int getDayOfYear() {
-        return dateTime.getDayOfYear();
-    }
-
-    /**
-     * A DateTime that is at the start of the current week. Time is preserved.
-     */
-    public DateTime startOfWeek() {
-        return new DateTime(dateTime.withDayOfWeek(1));
-    }
-
-    /**
-     * A DateTime that represents the start of the current month. Time is
-     * preserved.
-     */
-    public DateTime startOfMonth() {
-        return new DateTime(dateTime.withDayOfMonth(1));
-    }
-
-    /**
-     * This DateTime, but on the first day of the year. Time is preserved.
-     */
-    public DateTime startOfYear() {
-        return new DateTime(dateTime.withDayOfYear(1));
-    }
-
-    /**
-     * returns true if the time stamp of this object has the same value as the
-     * specified time
-     */
-    @Override
-    public boolean isEqualTo(final DateTime timeStamp) {
-        return this.dateTime.equals((timeStamp).dateTime);
-    }
-
-    /**
-     * returns true if the timeStamp of this object is earlier than the
-     * specified timeStamp
-     */
-    @Override
-    public boolean isLessThan(final DateTime timeStamp) {
-        return dateTime.isBefore((timeStamp).dateTime);
-    }
-
-    public boolean isSameDayAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : getDayOfYear() == dateTime2.getDayOfYear();
-    }
-
-    public boolean sameDayOfWeekAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : dateTime.getDayOfWeek() == dateTime2.dateTime.getDayOfWeek();
-    }
-
-    public boolean sameDayOfMonthAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : dateTime.getDayOfMonth() == dateTime2.dateTime.getDayOfMonth();
-    }
-
-    public boolean sameDayOfYearAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : dateTime.getDayOfYear() == dateTime2.dateTime.getDayOfYear();
-    }
-
-    public boolean sameWeekAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : dateTime.getWeekOfWeekyear() == dateTime2.dateTime.getWeekOfWeekyear();
-    }
-
-    public boolean sameMonthAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : getMonth() == dateTime2.getMonth();
-    }
-
-    public boolean sameYearAs(final DateTime dateTime2) {
-        return dateTime2 == null ? false : getYear() == dateTime2.getYear();
-    }
-
-    /**
-     * Gets the milliseconds since the Java epoch of 1970-01-01T00:00:00Z
-     */
-    public long millisSinceEpoch() {
-        return dateTime.getMillis();
-    }
-    
-    
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final DateTime other = (DateTime) obj;
-        if (dateTime == null) {
-            if (other.dateTime != null) {
-                return false;
-            }
-        } else if (!dateTime.equals(other.dateTime)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((dateTime == null) ? 0 : dateTime.hashCode());
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        // return getYear() + "-" + getMonth() + "-" + getDay() + " " +
-        // getHour() + ":" + getMinute();
-        return String.format("%04d-%02d-%02d %02d:%02d", getYear(), getMonth(), getDay(), getHour(), getMinute());
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Time.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Time.java
deleted file mode 100644
index c311656..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/Time.java
+++ /dev/null
@@ -1,263 +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.applib.value;
-
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.Period;
-import org.joda.time.format.DateTimeFormat;
-
-import org.apache.isis.applib.Defaults;
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.clock.Clock;
-
-/**
- * Value object representing a time value.
- * 
- * <p>
- * TODO: other methods to implement:
- * <ul>
- * <li>comparison methods</li>
- * <li>sameHourAs() hour ==hour sameMinuteAs() minutes = minutes
- * sameTimeAs(hour, min) hour == hour & minutes == minutes</li>
- * <li>withinNextTimePeriod(int hours, int minutes); withinTimePeriod(Date d,
- * int hours, int minutes)</li>
- * <li>withinPreviousTimePeriod(int hours, int minutes); d.hour >= this.hour >=
- * d.hour + hours & d.minutes >= this.minutes >= d.minutes + minutes</li>
- * </ul>
- *
- * @deprecated
- */
-@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.time.TimeValueSemanticsProvider")
-@Deprecated
-public class Time extends Magnitude<Time> {
-
-    private static final long serialVersionUID = 1L;
-    public static final int MINUTE = 60;
-    public static final int HOUR = 60 * MINUTE;
-    public static final int DAY = 24 * HOUR;
-
-    private final DateTime time;
-
-    /**
-     * Create a Time object set to the current time.
-     */
-    public Time() {
-        final DateTime dateTime = Clock.getTimeAsDateTime();
-        time = dateTime.withDate(1970, 1, 1); // Epoch is 1970-01-01
-    }
-
-    private DateTime newDateTime(final int hourOfDay, final int minuteOfHour, final int secondsOfMinute) {
-        return new DateTime(1970, 1, 1, hourOfDay, minuteOfHour, secondsOfMinute, 0, Defaults.getTimeZone());
-    }
-
-    /**
-     * Create a Time object for storing a time with the time set to the
-     * specified hours and minutes.
-     */
-    public Time(final int hour, final int minute) {
-        this(hour, minute, 0);
-    }
-
-    public Time(final int hour, final int minute, final int second) {
-        time = time(hour, minute, second);
-    }
-
-    private DateTime time(final int hour, final int minute, final int seconds) {
-        checkTime(hour, minute, seconds);
-        return newDateTime(hour, minute, seconds);
-    }
-
-    /**
-     * Create a Time object for storing a time with the time set to the
-     * specified time of the Java Date object.
-     */
-    public Time(final java.sql.Date date) {
-
-        this.time = new DateTime(date.getTime(), Defaults.getTimeZone());
-    }
-
-    /**
-     * 
-     * @param date
-     *            must have Date portion equal to Epoch
-     * @param calendar
-     */
-
-    public Time(final java.util.Date date, final DateTimeZone dateTimeZone) {
-        final DateTime DateTime = new DateTime(date.getTime(), dateTimeZone);
-        this.time = DateTime.secondOfMinute().setCopy(0);
-    }
-
-    /**
-     * Create a Time object for storing a time with the time set to the
-     * specified time of the Joda Time DateTime object.
-     */
-    public Time(final DateTime dateTime) {
-        this.time = newDateTime(dateTime.getHourOfDay(), dateTime.getMinuteOfHour(), dateTime.getSecondOfMinute());
-    }
-
-    /**
-     * Create a new Time object from the millisSinceEpoch, using UTC.
-     */
-    public Time(final long millisSinceEpoch) {
-        this.time = new DateTime(millisSinceEpoch, Defaults.getTimeZone());
-    }
-
-    /**
-     * Add the specified hours and minutes to this time value, returned as a new
-     * Time object.
-     */
-    public Time add(final int hours, final int minutes) {
-        final Period period = new Period(hours, minutes, 0, 0);
-        return new Time(time.plus(period));
-    }
-
-    private void checkTime(final int hour, final int minute, final int second) {
-        if ((hour < 0) || (hour > 23)) {
-            throw new IllegalArgumentException("Hour must be in the range 0 - 23 inclusive");
-        }
-
-        if ((minute < 0) || (minute > 59)) {
-            throw new IllegalArgumentException("Minute must be in the range 0 - 59 inclusive");
-        }
-
-        if ((second < 0) || (second > 59)) {
-            throw new IllegalArgumentException("Second must be in the range 0 - 59 inclusive");
-        }
-    }
-
-    /*
-     * public java.util.Date dateValue() { return (date == null) ? null : date;
-     * }
-     */
-
-    public int getHour() {
-        return time.getHourOfDay();
-    }
-
-    public int getMinute() {
-        return time.getMinuteOfHour();
-    }
-
-    public int getSecond() {
-        return time.getSecondOfMinute();
-    }
-
-    /**
-     * returns true if the time of this object has the same value as the
-     * specified time
-     */
-    @Override
-    public boolean isEqualTo(final Time time) {
-        return (time == null) ? false : (this.equals(time));
-    }
-
-    /**
-     * returns true if the time of this object is earlier than the specified
-     * time
-     */
-    @Override
-    public boolean isLessThan(final Time time) {
-        return (time != null) && this.time.isBefore((time).time);
-    }
-
-    /**
-     * The number of seconds since midnight.
-     */
-    @Deprecated
-    public long longValue() {
-        return time.getMillisOfDay() / 1000;
-    }
-
-    /**
-     * The number of seconds since midnight.
-     */
-    public long secondsSinceMidnight() {
-        return milliSecondsSinceMidnight() / 1000;
-    }
-
-    public long milliSecondsSinceMidnight() {
-        return time.getMillisOfDay();
-    }
-
-    public String titleString() {
-        return (time == null) ? "" : DateTimeFormat.shortTime().print(time);
-    }
-
-    public boolean sameHourAs(final Time time) {
-        return getHour() == time.getHour();
-    }
-
-    public boolean sameMinuteAs(final Time time) {
-        return getMinute() == time.getMinute();
-    }
-
-    public Time onTheHour() {
-        return new Time(getHour(), 0);
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((time == null) ? 0 : time.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final Time other = (Time) obj;
-        if (time == null) {
-            if (other.time != null) {
-                return false;
-            }
-        } else if (!time.equals(other.time)) {
-            return false;
-        }
-        return true;
-    }
-
-    public java.util.Date asJavaDate() {
-        return time.toDate();
-    }
-
-    public java.sql.Time asJavaTime() {
-        final java.sql.Time time1 = java.sql.Time.valueOf(toString());
-        // TODO: confirm that this is in UTC
-        return time1;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%02d:%02d:%02d", getHour(), getMinute(), getSecond());
-        // return String.format("%02d:%02d", getHour(), getMinute());
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/TimeStamp.java b/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/TimeStamp.java
deleted file mode 100644
index 34a249f..0000000
--- a/core/legacy/applib-legacy/src/main/java/org/apache/isis/applib/value/TimeStamp.java
+++ /dev/null
@@ -1,79 +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.applib.value;
-
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.clock.Clock;
-
-/**
- * Value object representing a date/time value marking a point in time This is a
- * user facing date/time value, more a marker used to indicate the temporal
- * relationship between two objects.
- * 
- * @see DateTime
- *
- * @deprecated
- */
-@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueSemanticsProvider")
-@Deprecated
-public class TimeStamp extends Magnitude<TimeStamp> {
-
-    private static final long serialVersionUID = 1L;
-    private final long time;
-
-    /**
-     * Create a TimeStamp object for storing a timeStamp set to the current
-     * time.
-     */
-    public TimeStamp() {
-        time = Clock.getTime();
-    }
-
-    public TimeStamp(final long time) {
-        this.time = time;
-    }
-
-    /**
-     * returns true if the time stamp of this object has the same value as the
-     * specified timeStamp
-     */
-    @Override
-    public boolean isEqualTo(final TimeStamp timeStamp) {
-        return this.time == (timeStamp).time;
-    }
-
-    /**
-     * returns true if the timeStamp of this object is earlier than the
-     * specified timeStamp
-     */
-    @Override
-    public boolean isLessThan(final TimeStamp timeStamp) {
-        return time < (timeStamp).time;
-    }
-
-    public long longValue() {
-        return time;
-    }
-
-    @Override
-    public String toString() {
-        return "Time Stamp " + longValue();
-    }
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/annotation/MemberGroupLayoutColumnSpansTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/annotation/MemberGroupLayoutColumnSpansTest.java
deleted file mode 100644
index 07a4136..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/annotation/MemberGroupLayoutColumnSpansTest.java
+++ /dev/null
@@ -1,41 +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.applib.annotation;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-
-public class MemberGroupLayoutColumnSpansTest {
-
-    @Test
-    public void asSpans() {
-        final ColumnSpans spans = MemberGroupLayout.ColumnSpans.asSpans(2,3,0,7);
-        
-        assertThat(spans.getLeft(), is(2));
-        assertThat(spans.getMiddle(), is(3));
-        assertThat(spans.getRight(), is(0));
-        assertThat(spans.getCollections(), is(7));
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacyTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacyTest.java
deleted file mode 100644
index 0538eef..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeLegacyTest.java
+++ /dev/null
@@ -1,78 +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.applib.services.exceprecog;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import java.util.function.Function;
-
-import org.junit.Test;
-
-public class ExceptionRecognizerForTypeLegacyTest {
-
-    private ExceptionRecognizer ersForType;
-
-    static class FooException extends Exception {
-        private static final long serialVersionUID = 1L;
-        public FooException() {
-            super("foo");
-        }
-        
-    }
-    static class BarException extends Exception {
-        private static final long serialVersionUID = 1L;
-        public BarException() {
-            super("bar");
-        }
-    }
-    
-    // -- LEGACY TESTS 
-
-    private com.google.common.base.Function<String,String> prependLegacy = 
-    		new com.google.common.base.Function<String, String>() {
-        @Override
-        public String apply(String input) {
-            return "pre: " + input;
-        }
-    };
-    
-    @Test
-    public void legacyWhenRecognized() {
-        ersForType = new ExceptionRecognizerForTypeLegacy(FooException.class);
-        assertThat(ersForType.recognize(new FooException()), is("foo"));
-    }
-
-    @Test
-    public void legacyWhenDoesNotRecognize() {
-        ersForType = new ExceptionRecognizerForTypeLegacy(FooException.class);
-        assertThat(ersForType.recognize(new BarException()), is(nullValue()));
-    }
-
-    @Test
-    public void legacyWhenRecognizedWithMessageParser() {
-        ersForType = new ExceptionRecognizerForTypeLegacy(FooException.class, prependLegacy);
-        assertThat(ersForType.recognize(new FooException()), is("pre: foo"));
-    }
-
-
-    
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralLegacyTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralLegacyTest.java
deleted file mode 100644
index 26bf3be..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralLegacyTest.java
+++ /dev/null
@@ -1,67 +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.applib.services.exceprecog;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import java.util.function.Predicate;
-
-import org.junit.Test;
-
-public class ExceptionRecognizerGeneralLegacyTest {
-
-    private ExceptionRecognizer ersGeneral;
-
-    static class FooException extends Exception {
-        private static final long serialVersionUID = 1L;
-        public FooException() {
-            super("foo");
-        }
-    }
-    
-    private com.google.common.base.Function<String,String> prepend = new com.google.common.base.Function<String, String>() {
-        @Override
-        public String apply(String input) {
-            return "pre: " + input;
-        }
-    };
-    
-    
-    @Test
-    public void whenRecognized_guava() {
-        ersGeneral = new ExceptionRecognizerAbstractLegacy(com.google.common.base.Predicates.<Throwable>alwaysTrue()){};
-        assertThat(ersGeneral.recognize(new FooException()), is("foo"));
-    }
-
-    @Test
-    public void whenDoesNotRecognize_guava() {
-        ersGeneral = new ExceptionRecognizerAbstractLegacy(com.google.common.base.Predicates.<Throwable>alwaysFalse()){};
-        assertThat(ersGeneral.recognize(new FooException()), is(nullValue()));
-    }
-
-    @Test
-    public void whenRecognizedWithMessageParser_guava() {
-        ersGeneral = new ExceptionRecognizerAbstractLegacy(com.google.common.base.Predicates.<Throwable>alwaysTrue(), prepend){};
-        assertThat(ersGeneral.recognize(new FooException()), is("pre: foo"));
-    }
- 
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/Invoice.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/Invoice.java
deleted file mode 100644
index 27ca497..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/Invoice.java
+++ /dev/null
@@ -1,38 +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.applib.util;
-
-
-class Invoice implements Comparable<Invoice>{
-    private static final String KEY_PROPERTIES = "number";
-    
-    private String number;
-    public String getNumber() {
-        return number;
-    }
-    public void setNumber(String number) {
-        this.number = number;
-    }
-    @Override
-    public String toString() {
-        return ObjectContractsLegacy.toString(this, KEY_PROPERTIES);
-    }
-    @Override
-    public int compareTo(Invoice o) {
-        return ObjectContractsLegacy.compare(this, o, KEY_PROPERTIES);
-    }
-}
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/InvoiceItem.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/InvoiceItem.java
deleted file mode 100644
index 258ae61..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/InvoiceItem.java
+++ /dev/null
@@ -1,73 +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.applib.util;
-
-
-class InvoiceItem implements Comparable<InvoiceItem> {
-
-    static InvoiceItem newInvoiceItem(Invoice invoice, String productCode, Integer quantity, Boolean rush) {
-        final InvoiceItem invoiceItem = new InvoiceItem();
-        invoiceItem.setInvoice(invoice);
-        invoiceItem.setProductCode(productCode);
-        invoiceItem.setQuantity(quantity);
-        invoiceItem.setRush(rush);
-        return invoiceItem;
-    }
-
-    private Invoice invoice;
-    public Invoice getInvoice() {
-        return invoice;
-    }
-    public void setInvoice(Invoice invoice) {
-        this.invoice = invoice;
-    }
-
-    private String productCode;
-    public String getProductCode() {
-        return productCode;
-    }
-    public void setProductCode(String productCode) {
-        this.productCode = productCode;
-    }
-    
-    private Integer quantity;
-    public Integer getQuantity() {
-        return quantity;
-    }
-    public void setQuantity(Integer quantity) {
-        this.quantity = quantity;
-    }
- 
-    private Boolean rush;
-    public Boolean isRush() {
-        return rush;
-    }
-    public void setRush(Boolean rush) {
-        this.rush = rush;
-    }
-    
-    private static final String KEY_PROPERTIES = "invoice desc, productCode asc, quantity asc nullsLast, rush desc nullsLast";
-    
-    @Override
-    public String toString() {
-        return ObjectContractsLegacy.toString(this, KEY_PROPERTIES);
-    }
-    @Override
-    public int compareTo(InvoiceItem o) {
-        return ObjectContractsLegacy.compare(this, o, KEY_PROPERTIES);
-    }
-}
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java
deleted file mode 100644
index fcb02e7..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java
+++ /dev/null
@@ -1,32 +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.applib.util;
-
-import org.apache.isis.applib.util.ObjectContractsLegacy.ToStringEvaluator;
-
-public class NumberedEvaluator implements ToStringEvaluator {
-
-    public boolean canEvaluate(Object o) {
-        return o instanceof Numbered;
-    }
-
-    @Override
-    public String evaluate(Object o) {
-        return ((Numbered)o).getNumber();
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_compareTo.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_compareTo.java
deleted file mode 100644
index 72a470e..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_compareTo.java
+++ /dev/null
@@ -1,77 +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.applib.util;
-
-import java.util.List;
-
-
-import org.junit.Before;
-
-import org.apache.isis.core.unittestsupport.comparable.ComparableContractTest_compareTo;
-
-public class ObjectContractsLegacyTest_compareTo extends ComparableContractTest_compareTo<InvoiceItem> {
-
-    private Invoice inv123;
-    private Invoice inv456;
-
-    @Before
-    public void setUp() throws Exception {
-        inv123 = new Invoice();
-        inv123.setNumber("123");
-
-        inv456 = new Invoice();
-        inv456.setNumber("456");
-    }
-
-    /**
-     * as per {@link InvoiceItem#compareTo(InvoiceItem)}
-     */
-    @SuppressWarnings("unchecked")
-    @Override
-    protected List<List<org.apache.isis.applib.util.InvoiceItem>> orderedTuples() {
-        return listOf(
-                   listOf(
-                           // invoice desc, ...
-                           InvoiceItem.newInvoiceItem(null, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv123, null, null, null)
-                           )
-                   ,listOf(
-                           // ..., productCode asc, ...
-                           InvoiceItem.newInvoiceItem(inv123, null, null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "B", null, null)
-                           )
-                   ,listOf(
-                           // ..., quantity asc nullsLast,...
-                           InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           )
-                   ,listOf(
-                           // ..., rush desc nullsLast
-                           InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), true)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
-                           )
-                );
-    }
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals.java
deleted file mode 100644
index 8654667..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals.java
+++ /dev/null
@@ -1,91 +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.applib.util;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ObjectContractsLegacyTest_equals {
-
-    static class Invoice4 {
-        private static final String KEY_PROPERTIES = "number";
-
-        private String number;
-        public String getNumber() {
-            return number;
-        }
-        public void setNumber(String number) {
-            this.number = number;
-        }
-        @Override
-        public int hashCode() {
-            return ObjectContractsLegacy.hashCode(this, KEY_PROPERTIES);
-        }
-        @Override
-        public boolean equals(Object obj) {
-            return ObjectContractsLegacy.equals(this, obj, KEY_PROPERTIES);
-        }
-
-    }
-
-    private Invoice4 p;
-    private Invoice4 q;
-    private Invoice4 r;
-    private String x;
-
-    @Before
-    public void setUp() throws Exception {
-        p = new Invoice4();
-        p.setNumber("123");
-        q = new Invoice4();
-        q.setNumber("123");
-        r = new Invoice4();
-        r.setNumber("456");
-
-        x = "this is not an invoice";
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        assertTrue(ObjectContractsLegacy.equals(p, q, "number"));
-    }
-
-    @Test
-    public void nullsAreEqual() throws Exception {
-        assertTrue(ObjectContractsLegacy.equals(null, null, "number"));
-    }
-
-    @Test
-    public void notEqualDifferentValues() throws Exception {
-        assertFalse(ObjectContractsLegacy.equals(p, r, "number"));
-    }
-
-    @Test
-    public void notEqualDifferentTypes() throws Exception {
-        assertFalse(ObjectContractsLegacy.equals(p, x, "number"));
-    }
-
-    @Test
-    public void notEqualNull() throws Exception {
-        assertFalse(ObjectContractsLegacy.equals(p, null, "number"));
-    }
-
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals_and_hashCode.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals_and_hashCode.java
deleted file mode 100644
index 445e059..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_equals_and_hashCode.java
+++ /dev/null
@@ -1,124 +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.applib.util;
-
-import java.util.List;
-
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
-import org.junit.Before;
-
-public class ObjectContractsLegacyTest_equals_and_hashCode extends ValueTypeContractTestAbstract<InvoiceItem3> {
-
-    private Invoice3 inv123;
-    private Invoice3 inv456;
-
-    @Before
-    public void setUp() throws Exception {
-        inv123 = new Invoice3();
-        inv123.setNumber("123");
-        inv456 = new Invoice3();
-        inv456.setNumber("456");
-    }
-
-    @Override
-    protected List<InvoiceItem3> getObjectsWithSameValue() {
-        return _Lists.of(
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1))
-                );
-    }
-
-    @Override
-    protected List<InvoiceItem3> getObjectsWithDifferentValue() {
-        return _Lists.of(
-                    InvoiceItem3.newInvoiceItem(null, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv456, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv123, null, new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv123, "B", new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", null)
-                );
-    }
-}
-
-class Invoice3 {
-    private static final String KEY_PROPERTIES = "number";
-    
-    private String number;
-    public String getNumber() {
-        return number;
-    }
-    public void setNumber(String number) {
-        this.number = number;
-    }
-    @Override
-    public int hashCode() {
-        return ObjectContractsLegacy.hashCode(this, KEY_PROPERTIES);
-    }
-    @Override
-    public boolean equals(Object obj) {
-        return ObjectContractsLegacy.equals(this, obj, KEY_PROPERTIES);
-    }
-    
-}
-
-class InvoiceItem3 {
-
-    static InvoiceItem3 newInvoiceItem(Invoice3 invoice, String productCode, Integer quantity) {
-        final InvoiceItem3 invoiceItem = new InvoiceItem3();
-        invoiceItem.setInvoice(invoice);
-        invoiceItem.setProductCode(productCode);
-        invoiceItem.setQuantity(quantity);
-        return invoiceItem;
-    }
-
-    private Invoice3 invoice;
-    public Invoice3 getInvoice() {
-        return invoice;
-    }
-    public void setInvoice(Invoice3 invoice) {
-        this.invoice = invoice;
-    }
-
-    private String productCode;
-    public String getProductCode() {
-        return productCode;
-    }
-    public void setProductCode(String productCode) {
-        this.productCode = productCode;
-    }
-    
-    private Integer quantity;
-    public Integer getQuantity() {
-        return quantity;
-    }
-    public void setQuantity(Integer quantity) {
-        this.quantity = quantity;
-    }
- 
-    
-    private static final String KEY_PROPERTIES = "invoice desc, productCode, quantity";
-    @Override
-    public int hashCode() {
-        return ObjectContractsLegacy.hashCode(this, KEY_PROPERTIES);
-    }
-    @Override
-    public boolean equals(Object obj) {
-        return ObjectContractsLegacy.equals(this, obj, KEY_PROPERTIES);
-    }
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_toString.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_toString.java
deleted file mode 100644
index a41319e..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/util/ObjectContractsLegacyTest_toString.java
+++ /dev/null
@@ -1,132 +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.applib.util;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class ObjectContractsLegacyTest_toString {
-
-    private Invoice inv;
-    private Invoice2 inv2;
-
-    @Before
-    public void setUp() throws Exception {
-        inv = new Invoice();
-        inv2 = new Invoice2();
-        
-        inv.setNumber("123");
-        inv2.setNumber("123");
-    }
-
-    @Test
-    public void vanilla() {
-        assertThat(InvoiceItem.newInvoiceItem(null, null, null, null).toString(), is("InvoiceItem{invoice=null, productCode=null, quantity=null, rush=null}"));
-        assertThat(InvoiceItem.newInvoiceItem(inv, null, null, null).toString(), is("InvoiceItem{invoice=Invoice{number=123}, productCode=null, quantity=null, rush=null}"));
-        assertThat(InvoiceItem.newInvoiceItem(inv, "A", null, null).toString(), is("InvoiceItem{invoice=Invoice{number=123}, productCode=A, quantity=null, rush=null}"));
-        assertThat(InvoiceItem.newInvoiceItem(inv, "A", new Integer(1), null).toString(), is("InvoiceItem{invoice=Invoice{number=123}, productCode=A, quantity=1, rush=null}"));
-        assertThat(InvoiceItem.newInvoiceItem(inv, "A", new Integer(1), true).toString(), is("InvoiceItem{invoice=Invoice{number=123}, productCode=A, quantity=1, rush=true}"));
-    }
-
-    @Test
-    public void customized() {
-        assertThat(InvoiceItem2.newInvoiceItem(null, null, null, null).toString(), is("InvoiceItem2{invoice=null, productCode=null, quantity=null, rush=null}"));
-        assertThat(InvoiceItem2.newInvoiceItem(inv2, null, null, null).toString(), is("InvoiceItem2{invoice=123, productCode=null, quantity=null, rush=null}"));
-        assertThat(InvoiceItem2.newInvoiceItem(inv2, "A", null, null).toString(), is("InvoiceItem2{invoice=123, productCode=A, quantity=null, rush=null}"));
-        assertThat(InvoiceItem2.newInvoiceItem(inv2, "A", new Integer(1), null).toString(), is("InvoiceItem2{invoice=123, productCode=A, quantity=1, rush=null}"));
-        assertThat(InvoiceItem2.newInvoiceItem(inv2, "A", new Integer(1), false).toString(), is("InvoiceItem2{invoice=123, productCode=A, quantity=1, rush=false}"));
-    }
-
-}
-
-class Invoice2 implements Comparable<Invoice2>, Numbered {
-    private static final String KEY_PROPERTIES = "number";
-    
-    private String number;
-    public String getNumber() {
-        return number;
-    }
-    public void setNumber(String number) {
-        this.number = number;
-    }
-    @Override
-    public String toString() {
-        return ObjectContractsLegacy.toString(this, KEY_PROPERTIES);
-    }
-    @Override
-    public int compareTo(Invoice2 o) {
-        return ObjectContractsLegacy.compare(this, o, KEY_PROPERTIES);
-    }
-}
-class InvoiceItem2 implements Comparable<InvoiceItem2> {
-
-    static InvoiceItem2 newInvoiceItem(Invoice2 invoice, String productCode, Integer quantity, Boolean rush) {
-        final InvoiceItem2 invoiceItem = new InvoiceItem2();
-        invoiceItem.setInvoice(invoice);
-        invoiceItem.setProductCode(productCode);
-        invoiceItem.setQuantity(quantity);
-        invoiceItem.setRush(rush);
-        return invoiceItem;
-    }
-
-    private Invoice2 invoice;
-    public Invoice2 getInvoice() {
-        return invoice;
-    }
-    public void setInvoice(Invoice2 invoice) {
-        this.invoice = invoice;
-    }
-
-    private String productCode;
-    public String getProductCode() {
-        return productCode;
-    }
-    public void setProductCode(String productCode) {
-        this.productCode = productCode;
-    }
-    
-    private Integer quantity;
-    public Integer getQuantity() {
-        return quantity;
-    }
-    public void setQuantity(Integer quantity) {
-        this.quantity = quantity;
-    }
- 
-    private Boolean rush;
-    public Boolean isRush() {
-        return rush;
-    }
-    public void setRush(Boolean rush) {
-        this.rush = rush;
-    }
-    
-    
-    private static final String KEY_PROPERTIES = "invoice desc, productCode, quantity, rush desc";
-    
-    @Override
-    public String toString() {
-        return new ObjectContractsLegacy().with(new NumberedEvaluator()).toStringOf(this, KEY_PROPERTIES);
-    }
-    @Override
-    public int compareTo(InvoiceItem2 o) {
-        return ObjectContractsLegacy.compare(this, o, KEY_PROPERTIES);
-    }
-}
\ No newline at end of file
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTest.java
deleted file mode 100644
index 5ef6988..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTest.java
+++ /dev/null
@@ -1,179 +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.applib.value;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class DateTest {
-
-    private Date actual;
-
-    @Before
-    public void setUp() throws Exception {
-        TestClock.initialize();
-        actual = new Date(2000, 3, 14);
-    }
-
-    @Test
-    public void testGetDay() {
-        assertEquals(14, actual.getDay());
-    }
-
-    @Test
-    public void testGetMonth() {
-        assertEquals(3, actual.getMonth());
-    }
-
-    @Test
-    public void testGetYear() {
-        assertEquals(2000, actual.getYear());
-    }
-
-    @Test
-    public void testAdd() {
-        final Date resultDate = actual.add(1, 2, 3);
-        assertEquals(17, resultDate.getDay());
-        assertEquals(5, resultDate.getMonth());
-        assertEquals(2001, resultDate.getYear());
-    }
-
-    @Test
-    public void testDate() {
-        actual = new Date(2001, 3, 7);
-        assertEquals("day", 7, actual.getDay());
-        assertEquals("month", 3, actual.getMonth());
-        assertEquals("year", 2001, actual.getYear());
-    }
-
-    @Test
-    public void testEquals() throws Exception {
-        assertTrue(actual.equals(actual));
-        assertTrue(new Date(2003, 8, 17).equals(new Date()));
-        assertTrue(actual.equals(new Date(2000, 3, 14)));
-    }
-
-    @Test
-    public void testIsLestThan() throws Exception {
-        assertFalse(new Date(2003, 8, 17).isLessThan(new Date(2003, 8, 17)));
-        assertTrue(new Date(2003, 8, 16).isLessThan(new Date(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameDayOfWeekAs() throws Exception {
-        assertTrue(new Date(2000, 2, 17).sameDayOfWeekAs(new Date(2003, 8, 7))); // Thursday
-        assertFalse(new Date(2000, 2, 15).sameDayOfWeekAs(new Date(2003, 8, 17))); // Tues
-                                                                                   // &
-    }
-
-    @Test
-    public void testSameDayOfMonthAs() throws Exception {
-        assertTrue(new Date(2000, 2, 17).sameDayOfMonthAs(new Date(2003, 8, 17)));
-        assertFalse(new Date(2000, 2, 15).sameDayOfMonthAs(new Date(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameDayOfYearAs() throws Exception {
-        assertTrue(new Date(2001, 8, 17).sameDayOfYearAs(new Date(2003, 8, 17)));
-        assertTrue(new Date(1999, 3, 1).sameDayOfYearAs(new Date(2000, 2, 29))); // leap
-                                                                                 // year
-        assertFalse(new Date(2001, 3, 1).sameDayOfYearAs(new Date(2000, 3, 2)));
-    }
-
-    @Test
-    public void testSameWeekAs() throws Exception {
-        assertFalse(new Date(2000, 2, 15).sameWeekAs(new Date(2000, 2, 12))); // Tue,
-                                                                              // week
-                                                                              // 7
-                                                                              // and
-                                                                              // Sat,
-                                                                              // week
-                                                                              // 6
-        assertTrue(new Date(2001, 2, 16).sameWeekAs(new Date(2002, 2, 11))); // Tue,
-                                                                             // week
-                                                                             // 7,
-                                                                             // and
-                                                                             // Thu,
-                                                                             // week
-        // 7
-    }
-
-    @Test
-    public void testSameMonthAs() throws Exception {
-        assertTrue(new Date(2000, 8, 15).sameMonthAs(new Date(2003, 8, 17)));
-        assertFalse(new Date(2003, 2, 17).sameMonthAs(new Date(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameYearAs() throws Exception {
-        assertTrue(new Date(2003, 2, 15).sameYearAs(new Date(2003, 8, 17)));
-        assertFalse(new Date(2000, 2, 15).sameYearAs(new Date(2003, 8, 17)));
-    }
-
-    @Test
-    public void testDateValue() {
-        final Date date = new Date(1970, 1, 1);
-        assertEquals(1970, date.getYear());
-        assertEquals(1, date.getMonth());
-        assertEquals(1, date.getDay());
-        final java.util.Date dateValue = date.dateValue();
-        final long time = dateValue.getTime();
-        assertEquals(1000 * 60 * 60 * 12 * 0, time);
-    }
-
-    @Test
-    public void testStartOfYear() {
-        assertEquals(new Date(2000, 1, 1), actual.startOfYear());
-    }
-
-    @Test
-    public void testStartOfMonth() {
-        assertEquals(new Date(2000, 3, 1), actual.startOfMonth());
-    }
-
-    @Test
-    public void testStartOfWeek() {
-        assertEquals(new Date(2000, 3, 13), actual.startOfWeek());
-        assertEquals(new Date(2000, 2, 28), new Date(2000, 3, 2).startOfWeek());
-    }
-
-    @Test
-    public void testEndOfMonth() {
-        assertEquals(new Date(2000, 2, 29), new Date(2000, 2, 2).endOfMonth());
-        assertEquals(new Date(2001, 2, 28), new Date(2001, 2, 2).endOfMonth());
-    }
-
-    @Test
-    public void testNewWithTodaysDate() {
-        final Date actual = new Date();
-        final Date expected = new Date(2003, 8, 17);
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void testToString() {
-        assertEquals("2000-03-14", actual.toString());
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTimeTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTimeTest.java
deleted file mode 100644
index a79989a..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/DateTimeTest.java
+++ /dev/null
@@ -1,186 +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.applib.value;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-// TODO review all date based classes - should we use factory and service to create and work with date type values?
-public class DateTimeTest {
-
-    private DateTime actual;
-    private int year, month, day, hour, minute;
-
-    @Before
-    public void setUp() throws Exception {
-        TestClock.initialize();
-        year = 2000;
-        month = 3;
-        day = 14;
-        hour = 10;
-        minute = 45;
-        actual = new DateTime(year, month, day, hour, minute);
-    }
-
-    @After
-    public void tearDown() {
-
-    }
-
-    @Test
-    public void testGetDay() {
-        assertEquals(14, actual.getDay());
-    }
-
-    @Test
-    public void testGetMonth() {
-        assertEquals(3, actual.getMonth());
-    }
-
-    @Test
-    public void testGetYear() {
-        assertEquals(2000, actual.getYear());
-    }
-
-    @Test
-    public void test24Hour() {
-        final DateTime dt = new DateTime(2006, 05, 07, 23, 59);
-        assertEquals("hour", 23, dt.getHour());
-        assertEquals("minute", 59, dt.getMinute());
-    }
-
-    @Test
-    public void testAdd() {
-        final DateTime resultDateTime = actual.add(1, 2, 3);
-        assertEquals(17, resultDateTime.getDay());
-        assertEquals(5, resultDateTime.getMonth());
-        assertEquals(2001, resultDateTime.getYear());
-    }
-
-    @Test
-    public void testEquals() throws Exception {
-        assertTrue(actual.equals(actual));
-        assertEquals(actual, new DateTime(2000, 3, 14, 10, 45));
-        assertTrue(new DateTime(2003, 8, 17).isSameDayAs(new DateTime()));
-    }
-
-    @Test
-    public void testIsLestThan() throws Exception {
-        assertFalse(new DateTime(2003, 8, 17).isLessThan(new DateTime(2003, 8, 17)));
-        assertTrue(new DateTime(2003, 8, 16).isLessThan(new DateTime(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameDayOfWeekAs() throws Exception {
-        assertTrue(new DateTime(2000, 2, 17).sameDayOfWeekAs(new DateTime(2003, 8, 7))); // Thursday
-        assertFalse(new DateTime(2000, 2, 15).sameDayOfWeekAs(new DateTime(2003, 8, 17))); // Tues
-                                                                                           // &
-    }
-
-    @Test
-    public void testSameDayOfMonthAs() throws Exception {
-        assertTrue(new DateTime(2000, 2, 17).sameDayOfMonthAs(new DateTime(2003, 8, 17)));
-        assertFalse(new DateTime(2000, 2, 15).sameDayOfMonthAs(new DateTime(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameDayOfYearAs() throws Exception {
-        assertTrue(new DateTime(2001, 8, 17).sameDayOfYearAs(new DateTime(2003, 8, 17)));
-        assertTrue(new DateTime(1999, 3, 1).sameDayOfYearAs(new DateTime(2000, 2, 29))); // leap
-                                                                                         // year
-        assertFalse(new DateTime(2001, 3, 1).sameDayOfYearAs(new DateTime(2000, 3, 2)));
-    }
-
-    @Test
-    public void testSameWeekAs() throws Exception {
-        assertFalse(new DateTime(2000, 2, 15).sameWeekAs(new DateTime(2000, 2, 12))); // Tue,
-                                                                                      // week
-                                                                                      // 7
-                                                                                      // and
-                                                                                      // Sat,
-        // week 6
-        assertTrue(new DateTime(2001, 2, 16).sameWeekAs(new DateTime(2002, 2, 11))); // Tue,
-                                                                                     // week
-                                                                                     // 7,
-                                                                                     // and
-                                                                                     // Thu,
-        // week 7
-    }
-
-    @Test
-    public void testSameMonthAs() throws Exception {
-        assertTrue(new DateTime(2000, 8, 15).sameMonthAs(new DateTime(2003, 8, 17)));
-        assertFalse(new DateTime(2003, 2, 17).sameMonthAs(new DateTime(2003, 8, 17)));
-    }
-
-    @Test
-    public void testSameYearAs() throws Exception {
-        assertTrue(new DateTime(2003, 2, 15).sameYearAs(new DateTime(2003, 8, 17)));
-        assertFalse(new DateTime(2000, 2, 15).sameYearAs(new DateTime(2003, 8, 17)));
-    }
-
-    @Test
-    public void testDateTimeValue() {
-        final DateTime date = new DateTime(1970, 1, 1, 0, 0, 0);
-        assertEquals(1970, date.getYear());
-        assertEquals(1, date.getMonth());
-        assertEquals(1, date.getDay());
-        final long time = date.millisSinceEpoch();
-        assertEquals(1000 * 60 * 60 * 24 * 0, time);
-
-        final long jtime = date.dateValue().getTime();
-        assertEquals(1000 * 60 * 60 * 24 * 0, jtime);
-
-    }
-
-    @Test
-    public void testStartOfYear() {
-        assertEquals(new DateTime(2000, 1, 1, hour, minute), actual.startOfYear());
-    }
-
-    @Test
-    public void testStartOfMonth() {
-        assertEquals(new DateTime(2000, 3, 1, hour, minute), actual.startOfMonth());
-    }
-
-    @Test
-    public void testStartOfWeek() {
-        assertEquals(new DateTime(2000, 3, 13, hour, minute), actual.startOfWeek());
-        assertEquals(new DateTime(2000, 2, 28), new DateTime(2000, 3, 2).startOfWeek());
-    }
-
-    @Test
-    public void testNewWithTodaysDateTime() {
-        final DateTime actual = new DateTime();
-        final DateTime expected = new DateTime(2003, 8, 17);
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void testToString() {
-        assertEquals("2000-03-14 10:45", actual.toString());
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeStampTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeStampTest.java
deleted file mode 100644
index e897f6f..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeStampTest.java
+++ /dev/null
@@ -1,61 +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.applib.value;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class TimeStampTest {
-
-    private TimeStamp timeStamp;
-
-    @Before
-    public void setUp() throws Exception {
-        TestClock.initialize();
-        timeStamp = new TimeStamp();
-    }
-
-    @Test
-    public void testCreatesToClocksTime() {
-        assertEquals(1061155825000L, timeStamp.longValue());
-    }
-
-    @Test
-    public void testEqualsTo() {
-        final TimeStamp timeStamp2 = new TimeStamp();
-        assertFalse(timeStamp2 == timeStamp);
-
-        assertTrue(timeStamp.isEqualTo(timeStamp2));
-        assertTrue(timeStamp2.isEqualTo(timeStamp));
-    }
-
-    @Test
-    public void testLessThan() {
-        final TimeStamp timeStamp2 = new TimeStamp(1061155825050L);
-
-        assertTrue(timeStamp.isLessThan(timeStamp2));
-        assertFalse(timeStamp2.isLessThan(timeStamp));
-    }
-
-}
diff --git a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeTest.java b/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeTest.java
deleted file mode 100644
index 41cafca..0000000
--- a/core/legacy/applib-legacy/src/test/java/org/apache/isis/applib/value/TimeTest.java
+++ /dev/null
@@ -1,127 +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.applib.value;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class TimeTest {
-    public static void main(final String[] args) {
-        final Date date = new Date(3600000 * 14);
-
-        Locale.setDefault(Locale.KOREA);
-        Locale.setDefault(Locale.US);
-        Locale.setDefault(Locale.FRANCE);
-
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
-        TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
-        TimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris"));
-
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
-
-        final DateFormat format = DateFormat.getDateTimeInstance();
-
-        System.out.println(date.toString());
-        System.out.println(format.format(date));
-    }
-
-    private Time time;
-
-    @Before
-    public void setUp() throws Exception {
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
-        TestClock.initialize();
-        time = new Time(13, 14);
-    }
-
-    @Test
-    public void testAdd() {
-        final Time result = time.add(2, 3);
-        assertEquals(17, result.getMinute());
-        assertEquals(15, result.getHour());
-    }
-
-    @Test
-    public void testEquals() throws Exception {
-        assertTrue(time.equals(time));
-        assertTrue(time.equals(new Time(13, 14)));
-        assertTrue(new Time(13, 14).equals(time));
-    }
-
-    @Test
-    public void testGetHour() {
-        assertEquals(13, time.getHour());
-    }
-
-    @Test
-    public void testGetMinute() {
-        assertEquals(14, time.getMinute());
-    }
-
-    @Test
-    public void testIsLestThan() throws Exception {
-        assertFalse(new Time(8, 17).isLessThan(new Time(8, 17)));
-        assertTrue(new Time(8, 16).isLessThan(new Time(8, 17)));
-    }
-
-    @Test
-    public void testNewWithCurrentTime() {
-        final Time expected = new Time(21, 30, 25);
-        final Time actual = new Time(); // Clock actually has 21:30:25
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void testSameHourAs() throws Exception {
-        assertTrue(new Time(8, 17).sameHourAs(new Time(8, 7)));
-        assertFalse(new Time(2, 15).sameHourAs(new Time(8, 17)));
-    }
-
-    @Test
-    public void testSameMinuteAs() throws Exception {
-        assertTrue(new Time(2, 17).sameMinuteAs(new Time(8, 17)));
-        assertFalse(new Time(2, 15).sameMinuteAs(new Time(8, 17)));
-    }
-
-    @Test
-    public void testStartOfHour() {
-        assertEquals(new Time(13, 00), time.onTheHour());
-    }
-
-    @Test
-    public void testTitle() {
-        assertEquals("13:14", time.titleString());
-    }
-
-    @Test
-    public void testToString() {
-        assertEquals("13:14:00", time.toString());
-    }
-
-}
diff --git a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java b/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
deleted file mode 100644
index e43d96a..0000000
--- a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.integtestsupport;
-
-import java.util.List;
-
-import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.fixtures.FixtureClock;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.applib.services.scratchpad.Scratchpad;
-import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
-import org.apache.isis.core.specsupport.specs.CukeGlueAbstract;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.junit.Rule;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.MethodRule;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
-
-/**
- * Base class for integration tests.
- * 
- * <p>
- * There is substantial overlap with {@link CukeGlueAbstract}, and it would be possible to factor
- * out a common base class.  Both delegate to an underlying {@link ScenarioExecution}, and provide
- * a bunch of helper methods.  The reason this has not been done is mostly to make it easier to see 
- * the equivalence of these two classes.
- * 
- * <p>
- * The only real differences between this class and {@link CukeGlueAbstract} is that this class 
- * uses JUnit rules to automatically perform {@link IsisTransactionRule transaction management} and
- * uses JUnit rules for {@link ExpectedException exception handling}.  In {@link CukeGlueAbstract} these
- * are required (by Cucumber-JVM) to be explicitly handled in the step definitions.
- *
- * @deprecated - to be replaced by {@link IntegrationTestAbstract3}
- */
-@Deprecated
-public abstract class IntegrationTestAbstract {
-
-    /**
-     * @deprecated - just inject domain services into test instead.
-     */
-    @Deprecated
-    protected static ScenarioExecution scenarioExecution() {
-        return ScenarioExecution.current();
-    }
-
-    // //////////////////////////////////////
-
-  
-    /**
-     * @deprecated - instead just inject {@link TransactionService} into test and use {@link TransactionService#nextTransaction()} instead.
-     */
-    @Deprecated
-    protected void nextTransaction() {
-        scenarioExecution().endTran(true);
-        scenarioExecution().beginTran();
-    }
-
-    /**
-     * @deprecated - instead just inject {@link SessionManagementService} or {@link TransactionService} into test and use either {@link SessionManagementService#nextSession()} or {@link TransactionService#nextTransaction()} instead.
-     */
-    @Deprecated
-    protected void nextRequest() {
-        nextTransaction();
-    }
-
-    /**
-     * @deprecated - instead just inject {@link SessionManagementService} into test and use {@link SessionManagementService#nextSession()} instead.
-     */
-    @Deprecated
-    protected void nextSession() {
-        scenarioExecution().endTran(true);
-        scenarioExecution().closeSession();
-        scenarioExecution().openSession();
-        scenarioExecution().beginTran();
-    }
-
-    /**
-     * If just require the current time, use {@link ClockService}.
-     */
-    protected FixtureClock getFixtureClock() {
-        return ((FixtureClock)FixtureClock.getInstance());
-    }
-
-
-    // //////////////////////////////////////
-
-    
-    /**
-     * @deprecated - just inject {@link Scratchpad} service into test and use {@link Scratchpad#get(Object)} instead.
-     */
-    @Deprecated
-    public Object getVar(final String type, final String id) {
-        return scenarioExecution().getVar(type, id);
-    }
-
-    /**
-     * @deprecated - just inject {@link Scratchpad} service into test and use {@link Scratchpad#get(Object)} instead.
-     */
-    @Deprecated
-    public <X> X getVar(final String type, final String id, final Class<X> cls) {
-        return scenarioExecution().getVar(type, id ,cls);
-    }
-
-    /**
-     * @deprecated - just inject {@link Scratchpad} service into test and use {@link Scratchpad#put(Object, Object)} instead.
-     */
-    @Deprecated
-    public void putVar(final String type, final String id, final Object value) {
-        scenarioExecution().putVar(type, id, value);
-    }
-
-    /**
-     * @deprecated - just inject {@link Scratchpad} service into test and use {@link Scratchpad#put(Object, Object)} (setting to <tt>null</tt>) instead.
-     */
-    @Deprecated
-    public void removeVar(final String type, final String id) {
-        scenarioExecution().removeVar(type, id);
-    }
-
-    /**
-     * @deprecated - instead just inject service into test; optionally use {@link ServiceRegistry} service to lookup other services.
-     */
-    @Deprecated
-    protected <T> T service(final Class<T> cls) {
-        return scenarioExecution().service(cls);
-    }
-    
-//    /**
-//     * @deprecated - instead just inject {@link org.apache.isis.applib.DomainObjectContainer} into test.
-//     */
-//    @Deprecated
-//    protected DomainObjectContainer container() {
-//        return scenarioExecution().container();
-//    }
-    
-    /**
-     * @deprecated - instead just inject {@link org.apache.isis.applib.services.wrapper.WrapperFactory} into test.
-     */
-    @Deprecated
-    protected WrapperFactory wrapperFactory() {
-        return scenarioExecution().wrapperFactory();
-    }
-
-    /**
-     * Convenience method
-     */
-    protected <T> T wrap(final T obj) {
-        return scenarioExecution().wrapperFactory().wrap(obj);
-    }
-
-    /**
-     * Convenience method
-     */
-    protected <T> T unwrap(final T obj) {
-        return scenarioExecution().wrapperFactory().unwrap(obj);
-    }
-
-    /**
-     * Convenience method
-     */
-    protected <T> T mixin(final Class<T> mixinClass, final Object mixedIn) {
-        return service(FactoryService.class).mixin(mixinClass, mixedIn);
-    }
-
-    
-    // //////////////////////////////////////
-
-    /**
-     * The order is important; this rule is outermost, and must - at a minimum - come before
-     * the {@link #expectedExceptions} rule.
-     */
-    @Rule
-    public IsisTransactionRule isisTransactionRule = new IsisTransactionRule();
-
-    private static class IsisTransactionRule implements MethodRule  {
-
-        @Override
-        public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
-            final IsisSystemForTest isft = IsisSystemForTest.get(); 
-            
-            return new Statement() {
-                @Override
-                public void evaluate() throws Throwable {
-                    isft.getIsisSessionFactory().getServicesInjector().injectServicesInto(target);
-                    isft.beginTran();
-                    try {
-                        base.evaluate();
-                        isft.endTran();
-                        isft.nextSession();
-                    } catch(final Throwable e) {
-
-                        // if test failed to clean up after itself, then take care of it here.
-                        endTransactionTilDone();
-
-                        isft.nextSession();
-                        final List<Throwable> causalChain = _Exceptions.getCausalChain(e);
-                        // if underlying cause is an applib-defined exception, throw that rather than Isis' wrapper exception
-                        for (final Throwable cause : causalChain) {
-                            if(cause instanceof RecoverableException ||
-                               cause instanceof NonRecoverableException) {
-                                throw cause;
-                            }
-                        }
-                        throw e;
-                    }
-                }
-
-                protected void endTransactionTilDone() {
-                    IsisTransactionManager tranMgr = isft.getIsisSessionFactory().getCurrentSession()
-                                                         .getPersistenceSession().getTransactionManager();
-                    int count = 0;
-                    while(tranMgr.getTransactionLevel() > 0 &&
-                          count++ < 10              // just in case, to prevent an infinite loop...
-                            ) {
-                        try {
-                            tranMgr.endTransaction();
-                        } catch(Exception ignore) {
-                            // ignore
-                        }
-                    }
-                }
-            };
-        }
-    }
-
-    // //////////////////////////////////////
-
-    /**
-     * Convenience method to avoid some boilerplate and rename (as more in keeping with the
-     * {@link org.apache.isis.applib.fixturescripts.FixtureScript} API compared to the older
-     * {@link org.apache.isis.applib.fixtures.InstallableFixture} API).
-     *
-     * @deprecated  - just inject {@link org.apache.isis.applib.fixturescripts.FixtureScripts} service for your application, and call.  If multiple fixture scripts, create an anonymous subclass of {@link org.apache.isis.applib.fixturescripts.FixtureScript} and override {@link org.apache.isis.applib.fixturescripts.FixtureScript#execute(org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext)} execute.
-     */
-    @Deprecated
-    protected static void runScript(final FixtureScript... fixtureScripts) {
-        scenarioExecution().install(fixtureScripts);
-    }
-
-    // //////////////////////////////////////
-
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Rule
-    public ExpectedException expectedExceptions = ExpectedException.none();
-
-    @Rule
-    public ExceptionRecognizerTranslate exceptionRecognizerTranslations = ExceptionRecognizerTranslate.create();
-}
-
diff --git a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract2.java b/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract2.java
deleted file mode 100644
index 534660b..0000000
--- a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract2.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.integtestsupport;
-
-import javax.inject.Inject;
-
-import org.hamcrest.TypeSafeMatcher;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.AppManifestAbstract;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
-import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
-import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
-
-/**
- * Extended base class for integration tests.
- *
- * @deprecated - to be replaced by {@link IntegrationTestAbstract3}
- */
-@Deprecated
-public abstract class IntegrationTestAbstract2 extends IntegrationTestAbstract {
-
-    private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestAbstract2.class);
-
-    /**
-     * Convenience, will call {@link AppManifestAbstract.Builder#build() build} on the provided
-     * {@link AppManifestAbstract.Builder Builder}, then delegate to {@link #bootstrapUsing(AppManifest)}.
-     */
-    protected static void bootstrapUsing(final AppManifestAbstract.Builder builder) {
-        bootstrapUsing(builder.build());
-    }
-
-    /**
-     * Intended to be called from the subclass' <code>@BeforeClass init()</code> method.
-     */
-    protected static void bootstrapUsing(final AppManifest appManifest) {
-        org.apache.log4j.PropertyConfigurator.configure("logging-integtest.properties");
-        IsisSystemForTest isft = IsisSystemForTest.getElseNull();
-        if(isft == null) {
-            isft = new IsisSystemForTest.Builder()
-                    .withLoggingAt(org.apache.log4j.Level.INFO)
-                    .with(appManifest)
-                    .with(new IsisConfigurationForJdoIntegTests())
-                    .build()
-                    .setUpSystem();
-            IsisSystemForTest.set(isft);
-        }
-
-        // instantiating will install onto ThreadLocal
-        new ScenarioExecutionForIntegration();
-    }
-
-    /**
-     * Replacement for the deprecated {@link #runScript(FixtureScript...)}.
-     */
-    protected void runFixtureScript(final FixtureScript... fixtureScriptList) {
-        if(fixtureScriptList.length == 1) {
-            fixtureScripts.runFixtureScript(fixtureScriptList[0], null);
-        } else {
-            fixtureScripts.runFixtureScript(new FixtureScript() {
-                @Override
-                protected void execute(final FixtureScript.ExecutionContext executionContext) {
-                    for (FixtureScript fixtureScript : fixtureScriptList) {
-                        executionContext.executeChild(this, fixtureScript);
-                    }
-                }
-            }, null);
-        }
-        nextTransaction();
-    }
-
-    protected static TypeSafeMatcher<Throwable> causedBy(final Class<?> type) {
-        return ThrowableMatchers.causedBy(type);
-    }
-
-    @Inject
-    protected FixtureScripts fixtureScripts;
-
-    @Inject
-    protected FactoryService factoryService;
-
-    @javax.inject.Inject
-    protected ServiceRegistry serviceRegistry;
-
-    @Inject
-    RepositoryService repositoryService;
-
-    @javax.inject.Inject
-    protected UserService userService;
-
-    @javax.inject.Inject
-    protected WrapperFactory wrapperFactory;
-
-    @Inject
-    protected TransactionService transactionService;
-
-    @Inject
-    protected SessionManagementService sessionManagementService;
-
-}
-
diff --git a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
deleted file mode 100644
index ef8cd70..0000000
--- a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.integtestsupport;
-
-import static org.junit.Assert.fail;
-
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.fixtures.FixtureClock;
-import org.apache.isis.applib.fixtures.InstallableFixture;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
-import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
-import org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate;
-import org.apache.isis.core.runtime.headless.IsisComponentProviderDefault;
-import org.apache.isis.core.runtime.headless.IsisSystem;
-import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
-import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
-import org.apache.isis.core.runtime.system.transaction.IsisTransaction.State;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProvider;
-import org.apache.isis.core.security.authentication.AuthenticationRequestNameOnly;
-import org.apache.isis.core.specsupport.scenarios.DomainServiceProvider;
-import org.junit.Before;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-/**
- * Wraps a plain {@link IsisSessionFactoryBuilder}, and provides a number of features to assist with testing.
- *
- * @deprecated - to be replaced by {@link IsisSystem}.
- */
-@Deprecated
-public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServiceProvider {
-
-    // -- Listener, ListenerAdapter
-    public interface Listener {
-
-        void init(IsisConfiguration configuration) throws Exception;
-        
-        void preOpenSession(boolean firstTime) throws Exception;
-        void postOpenSession(boolean firstTime) throws Exception;
-        
-        void preNextSession() throws Exception;
-        void postNextSession() throws Exception;
-
-        void preCloseSession() throws Exception;
-        void postCloseSession() throws Exception;
-    }
-    
-    public static abstract class ListenerAdapter implements Listener {
-        
-        private IsisConfiguration configuration;
-
-        public void init(IsisConfiguration configuration) throws Exception {
-            this.configuration = configuration;
-        }
-        
-        protected IsisConfiguration getConfiguration() {
-            return configuration;
-        }
-
-        @Override
-        public void preOpenSession(boolean firstTime) throws Exception {
-        }
-
-        @Override
-        public void postOpenSession(boolean firstTime) throws Exception {
-        }
-
-        @Override
-        public void preNextSession() throws Exception {
-        }
-
-        @Override
-        public void postNextSession() throws Exception {
-        }
-
-        @Override
-        public void preCloseSession() throws Exception {
-        }
-
-        @Override
-        public void postCloseSession() throws Exception {
-        }
-    }
-
-    
-
-    // -- getElseNull, get, set
-
-    private static ThreadLocal<IsisSystemForTest> ISFT = new ThreadLocal<>();
-
-    public static IsisSystemForTest getElseNull() {
-        return ISFT.get();
-    }
-    
-    public static IsisSystemForTest get() {
-        final IsisSystemForTest isft = ISFT.get();
-        if(isft == null) {
-            throw new IllegalStateException("No IsisSystemForTest available on thread; call #set(IsisSystemForTest) first");
-        }
-
-        return isft;
-    }
-
-    public static void set(IsisSystemForTest isft) {
-        ISFT.set(isft);
-    }
-    
-
-    // -- Builder
-
-
-    public static class Builder {
-
-        private AuthenticationRequest authenticationRequest = new AuthenticationRequestNameOnly("tester");
-
-        private IsisConfigurationDefault configuration = new IsisConfigurationDefault();
-
-        private AppManifest appManifestIfAny;
-
-//[ahuber] not used        
-//        private final List<Object> services = _Lists.newArrayList();
-//        private final List<InstallableFixture> fixtures = _Lists.newArrayList();
-
-        private final List <Listener> listeners = _Lists.newArrayList();
-
-        private org.apache.log4j.Level level;
-
-        public Builder with(IsisConfiguration configuration) {
-            this.configuration = (IsisConfigurationDefault) configuration;
-            return this;
-        }
-
-        public Builder with(AuthenticationRequest authenticationRequest) {
-            this.authenticationRequest = authenticationRequest;
-            return this;
-        }
-
-        public Builder with(AppManifest appManifest) {
-            this.appManifestIfAny = appManifest;
-            return this;
-        }
-
-        public Builder withLoggingAt(org.apache.log4j.Level level) {
-            this.level = level;
-            return this;
-        }
-
-        public IsisSystemForTest build() {
-            final IsisSystemForTest isisSystemForTest =
-                    new IsisSystemForTest(
-                            appManifestIfAny,
-                            configuration,
-                            authenticationRequest,
-                            listeners);
-            if(level != null) {
-                isisSystemForTest.setLevel(level);
-            }
-
-            Runtime.getRuntime().addShutdownHook(new Thread() {
-                @Override
-                public synchronized void run() {
-                    try {
-                        isisSystemForTest.closeSession();
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-
-                    try {
-                        if(isisSystemForTest.isisSessionFactory != null) {
-                            isisSystemForTest.isisSessionFactory.destroyServicesAndShutdown();
-                        }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            });
-
-            return isisSystemForTest;
-        }
-
-
-        public Builder with(Listener listener) {
-            if(listener != null) {
-                listeners.add(listener);
-            }
-            return this;
-        }
-
-    }
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    
-
-    // -- constructor, fields
-
-    // these fields 'xxxForComponentProvider' are used to initialize the IsisComponentProvider, but shouldn't be used thereafter.
-    private final AppManifest appManifestIfAny;
-    private final IsisConfiguration configurationOverride;
-
-    private final AuthenticationRequest authenticationRequestIfAny;
-    private AuthenticationSession authenticationSession;
-
-
-    private IsisSystemForTest(
-            final AppManifest appManifestIfAny,
-            final IsisConfiguration configurationOverride,
-            final AuthenticationRequest authenticationRequestIfAny,
-            final List<Listener> listeners) {
-        this.appManifestIfAny = appManifestIfAny;
-        this.configurationOverride = configurationOverride;
-        this.authenticationRequestIfAny = authenticationRequestIfAny;
-        this.listeners = listeners;
-    }
-
-    
-
-    // -- level
-    private org.apache.log4j.Level level = org.apache.log4j.Level.INFO;
-
-    /**
-     * The level to use for the root logger if fallback (ie a <tt>logging.properties</tt> file cannot be found).
-     */
-    public org.apache.log4j.Level getLevel() {
-        return level;
-    }
-    
-    public void setLevel(org.apache.log4j.Level level) {
-        this.level = level;
-    }
-
-    
-
-    // -- setup (also componentProvider)
-
-    // populated at #setupSystem
-    private IsisComponentProvider componentProvider;
-
-    /**
-     * Intended to be called from a test's {@link Before} method.
-     */
-    public IsisSystemForTest setUpSystem() throws RuntimeException {
-        try {
-            initIfRequiredThenOpenSession(FireListeners.FIRE);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        return this;
-    }
-
-    private void initIfRequiredThenOpenSession(FireListeners fireListeners) throws Exception {
-
-        // exit as quickly as possible for this case...
-        final MetaModelInvalidException mmie = IsisContext.getMetaModelInvalidExceptionIfAny();
-        if(mmie != null) {
-            final Set<String> validationErrors = mmie.getValidationErrors();
-            final String validationMsg = _NullSafe.stream(validationErrors)
-            		.collect(Collectors.joining("\n"));
-            fail(validationMsg);
-            return;
-        }
-
-        boolean firstTime = isisSessionFactory == null;
-        if(fireListeners.shouldFire()) {
-            fireInitAndPreOpenSession(firstTime);
-        }
-
-        if(firstTime) {
-            IsisLoggingConfigurer isisLoggingConfigurer = new IsisLoggingConfigurer(getLevel());
-            isisLoggingConfigurer.configureLogging(".", new String[] {});
-
-            componentProvider = new IsisComponentProviderDefault(
-                    appManifestIfAny,
-                    configurationOverride
-            );
-
-            final IsisSessionFactoryBuilder isisSessionFactoryBuilder = new IsisSessionFactoryBuilder(componentProvider, DeploymentCategory.PRODUCTION, appManifestIfAny);
-
-            // ensures that a FixtureClock is installed as the singleton underpinning the ClockService
-            FixtureClock.initialize();
-
-            isisSessionFactory = isisSessionFactoryBuilder.buildSessionFactory();
-            // REVIEW: does no harm, but is this required?
-            closeSession();
-
-            // if the IsisSystem does not initialize properly, then - as a side effect - the resulting
-            // MetaModelInvalidException will be pushed onto the IsisContext (as a static field).
-            final MetaModelInvalidException ex = IsisContext.getMetaModelInvalidExceptionIfAny();
-            if (ex != null) {
-
-                // for subsequent tests; the attempt to bootstrap the framework will leave
-                // the IsisContext singleton as set.
-                IsisContext.clear();
-
-                final Set<String> validationErrors = ex.getValidationErrors();
-                final StringBuilder buf = new StringBuilder();
-                for (String validationError : validationErrors) {
-                    buf.append(validationError).append("\n");
-                }
-                fail("Metamodel is invalid: \n" + buf.toString());
-            }
-        }
-
-        final AuthenticationManager authenticationManager = isisSessionFactory.getAuthenticationManager();
-        authenticationSession = authenticationManager.authenticate(authenticationRequestIfAny);
-
-        openSession();
-
-        if(fireListeners.shouldFire()) {
-            firePostOpenSession(firstTime);
-        }
-    }
-
-    
-
-    // -- isisSystem (populated during setup)
-    private IsisSessionFactory isisSessionFactory;
-
-    /**
-     * The {@link IsisSessionFactory} created during {@link #setUpSystem()}.
-     */
-    public IsisSessionFactory getIsisSessionFactory() {
-        return isisSessionFactory;
-    }
-
-    /**
-     * The {@link AuthenticationSession} created during {@link #setUpSystem()}.
-     */
-    public AuthenticationSession getAuthenticationSession() {
-        return authenticationSession;
-    }
-
-    
-
-    // -- teardown
-
-    private void closeSession(final FireListeners fireListeners) throws Exception {
-        if(fireListeners.shouldFire()) {
-            firePreCloseSession();
-        }
-        if(isisSessionFactory.inSession()) {
-            isisSessionFactory.closeSession();
-        }
-        if(fireListeners.shouldFire()) {
-            firePostCloseSession();
-        }
-    }
-
-    public void nextSession() throws Exception {
-        firePreNextSession();
-        closeSession();
-        openSession();
-        firePostNextSession();
-    }
-
-    
-
-    // -- openSession, closeSession
-    public void openSession() throws Exception {
-        openSession(authenticationSession);
-
-    }
-
-    public void openSession(AuthenticationSession authenticationSession) throws Exception {
-        isisSessionFactory.openSession(authenticationSession);
-    }
-
-    public void closeSession() throws Exception {
-        closeSession(FireListeners.FIRE);
-    }
-
-    
-
-    // -- listeners
-
-    private List <Listener> listeners;
-
-    private enum FireListeners {
-        FIRE,
-        DONT_FIRE;
-        public boolean shouldFire() {
-            return this == FIRE;
-        }
-    }
-
-
-    private void fireInitAndPreOpenSession(boolean firstTime) throws Exception {
-        if(firstTime) {
-            for(Listener listener: listeners) {
-                listener.init(componentProvider.getConfiguration());
-            }
-        }
-        for(Listener listener: listeners) {
-            listener.preOpenSession(firstTime);
-        }
-    }
-
-    private void firePostOpenSession(boolean firstTime) throws Exception {
-        for(Listener listener: listeners) {
-            listener.postOpenSession(firstTime);
-        }
-    }
-
-    private void firePreCloseSession() throws Exception {
-        for(Listener listener: listeners) {
-            listener.preCloseSession();
-        }
-    }
-
-    private void firePostCloseSession() throws Exception {
-        for(Listener listener: listeners) {
-            listener.postCloseSession();
-        }
-    }
-
-    private void firePreNextSession() throws Exception {
-        for(Listener listener: listeners) {
-            listener.preNextSession();
-        }
-    }
-
-    private void firePostNextSession() throws Exception {
-        for(Listener listener: listeners) {
-            listener.postNextSession();
-        }
-    }
-    
-
-    // -- JUnit @Rule integration
-
-    @Override
-    public Statement apply(final Statement base, final Description description) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                setUpSystem();
-                try {
-                    base.evaluate();
-                    closeSession();
-                } catch(Throwable ex) {
-                    try {
-                        closeSession();
-                    } catch(Exception ex2) {
-                        // ignore, since already one pending
-                    }
-                    throw ex;
-                }
-            }
-        };
-    }
-
-    
-
-    // -- beginTran, endTran, commitTran, abortTran
-
-    /**
-     * @deprecated - ought to be using regular domain services rather than reaching into the framework
-     */
-    @Deprecated
-    public void beginTran() {
-        final IsisTransactionManager transactionManager = getTransactionManager();
-        final IsisTransaction transaction = transactionManager.getCurrentTransaction();
-
-        if(transaction == null) {
-            startTransactionForUser(transactionManager);
-            return;
-        }
-
-        final State state = transaction.getState();
-        switch(state) {
-            case COMMITTED:
-            case ABORTED:
-                startTransactionForUser(transactionManager);
-                break;
-            case IN_PROGRESS:
-                // nothing to do
-                break;
-            case MUST_ABORT:
-                fail("Transaction is in state of '" + state + "'");
-                break;
-            default:
-                fail("Unknown transaction state '" + state + "'");
-        }
-
-    }
-
-    private void startTransactionForUser(IsisTransactionManager transactionManager) {
-        transactionManager.startTransaction();
-
-        // specify that this command (if any) is being executed by a 'USER'
-        final CommandContext commandContext = getService(CommandContext.class);
-        Command command = commandContext.getCommand();
-        command.setExecutor(Command.Executor.USER);
-    }
-
-    /**
-     * Either commits or aborts the transaction, depending on the Transaction's {@link org.apache.isis.core.runtime.system.transaction.IsisTransaction#getState()}
-     *
-     * @deprecated - ought to be using regular domain services rather than reaching into the framework
-     */
-    @Deprecated
-    public void endTran() {
-        final IsisTransactionManager transactionManager = getTransactionManager();
-        final IsisTransaction transaction = transactionManager.getCurrentTransaction();
-        if(transaction == null) {
-            fail("No transaction exists");
-            return;
-        }
-
-        transactionManager.endTransaction();
-
-        final State state = transaction.getState();
-        switch(state) {
-            case COMMITTED:
-                break;
-            case ABORTED:
-                break;
-            case IN_PROGRESS:
-                fail("Transaction is still in state of '" + state + "'");
-                break;
-            case MUST_ABORT:
-                fail("Transaction is still in state of '" + state + "'");
-                break;
-            default:
-                fail("Unknown transaction state '" + state + "'");
-        }
-    }
-
-    /**
-     * Commits the transaction.
-     *
-     * @deprecated - ought to be using regular domain services rather than reaching into the framework
-     */
-    @Deprecated
-    public void commitTran() {
-        final IsisTransactionManager transactionManager = getTransactionManager();
-        final IsisTransaction transaction = transactionManager.getCurrentTransaction();
-        if(transaction == null) {
-            fail("No transaction exists");
-            return;
-        }
-        final State state = transaction.getState();
-        switch(state) {
-            case COMMITTED:
-            case ABORTED:
-            case MUST_ABORT:
-                fail("Transaction is in state of '" + state + "'");
-                break;
-            case IN_PROGRESS:
-                transactionManager.endTransaction();
-                break;
-            default:
-                fail("Unknown transaction state '" + state + "'");
-        }
-    }
-
-    /**
-     * Aborts the transaction.
-     *
-     * @deprecated - ought to be using regular domain services rather than reaching into the framework
-     */
-    @Deprecated
-    public void abortTran() {
-        final IsisTransactionManager transactionManager = getTransactionManager();
-        final IsisTransaction transaction = transactionManager.getCurrentTransaction();
-        if(transaction == null) {
-            fail("No transaction exists");
-            return;
-        }
-        final State state = transaction.getState();
-        switch(state) {
-            case ABORTED:
-                break;
-            case COMMITTED:
-                fail("Transaction is in state of '" + state + "'");
-                break;
-            case MUST_ABORT:
-            case IN_PROGRESS:
-                transactionManager.abortTransaction();
-                break;
-            default:
-                fail("Unknown transaction state '" + state + "'");
-        }
-    }
-
-    
-
-    // -- getService, replaceService
-
-    /* (non-Javadoc)
-     * @see org.apache.isis.core.integtestsupport.ServiceProvider#getService(java.lang.Class)
-     */
-    @Override
-    public <T> T getService(Class<T> serviceClass) {
-        final ServicesInjector servicesInjector = isisSessionFactory.getServicesInjector();
-        return servicesInjector.lookupServiceElseFail(serviceClass);
-    }
-
-    @Override
-    public <T> void replaceService(final T originalService, final T replacementService) {
-        final ServicesInjector servicesInjector = isisSessionFactory.getServicesInjector();
-        servicesInjector.replaceService(originalService, replacementService);
-    }
-
-    
-
-    // -- Fixture management (for each test, rather than at bootstrap)
-
-    /**
-     * @deprecated - use {@link org.apache.isis.applib.fixturescripts.FixtureScripts} domain service instead.
-     */
-    @Deprecated
-    public void installFixtures(final InstallableFixture... fixtures) {
-        final FixturesInstallerDelegate fid = new FixturesInstallerDelegate(isisSessionFactory);
-        for (final InstallableFixture fixture : fixtures) {
-            fid.addFixture(fixture);
-        }
-        fid.installFixtures();
-
-        // ensure that tests are performed in separate xactn to any fixture setup.
-        final IsisTransactionManager transactionManager = getTransactionManager();
-        final IsisTransaction transaction = transactionManager.getCurrentTransaction();
-        final State transactionState = transaction.getState();
-        if(transactionState.canCommit()) {
-            commitTran();
-            try {
-                nextSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            beginTran();
-        }
-    }
-
-    
-
-    // -- Dependencies
-
-    private IsisTransactionManager getTransactionManager() {
-        return getPersistenceSession().getTransactionManager();
-    }
-    
-    private PersistenceSession getPersistenceSession() {
-        return isisSessionFactory.getCurrentSession().getPersistenceSession();
-    }
-
-    
-
-}
diff --git a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java b/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
deleted file mode 100644
index a8b216f..0000000
--- a/core/legacy/integtestsupport-legacy/src/main/java/org/apache/isis/core/integtestsupport/scenarios/ScenarioExecutionForIntegration.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.integtestsupport.scenarios;
-
-import org.apache.isis.applib.fixtures.InstallableFixture;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
-import org.apache.isis.core.integtestsupport.IsisSystemForTest;
-import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
-import org.apache.isis.core.specsupport.scenarios.ScenarioExecutionScope;
-
-/**
- * An extension of {@link ScenarioExecution} for use within (coarse grained)
- * integration tests and Cucumber specs where there is back-end database.
- *
- * <p>
- * To this end it provides implementations of 
- * {@link #install(InstallableFixture...)} (to tear down/setup data)
- * and of {@link #beginTran() begin} and {@link #endTran(boolean) end} (
- * for transaction management.
- *
- * @deprecated - subclass glue from {@link HeadlessWithBootstrappingAbstract} instead, and inject services into glue
- */
-@Deprecated
-public class ScenarioExecutionForIntegration extends ScenarioExecution  {
-
-    private IsisSystemForTest isft;
-
-    public ScenarioExecutionForIntegration() {
-        super(IsisSystemForTest.get(), ScenarioExecutionScope.INTEGRATION);
-        this.isft = (IsisSystemForTest) dsp;
-    }
-
-    // //////////////////////////////////////
-
-    public WrapperFactory wrapperFactory() {
-        return service(WrapperFactory.class);
-    }
-
-    // //////////////////////////////////////
-
-    /**
-     * Install arbitrary fixtures, eg before an integration tests or as part of a 
-     * Cucumber step definitions or hook.
-     */
-    public void install(InstallableFixture... fixtures) {
-        isft.installFixtures(fixtures);
-    }
-
-    // //////////////////////////////////////
-
-    /**
-     * For Cucumber hooks to call, performing transaction management around each step.
-     */
-    public void beginTran() {
-        isft.beginTran();
-    }
-
-    /**
-     * For Cucumber hooks to call, performing transaction management around each step.
-     */
-    public void endTran(boolean ok) {
-        if(ok) {
-            isft.commitTran();
-        } else {
-            isft.abortTran();
-        }
-
-    }
-
-    @Override
-    public void openSession() {
-        try {
-            isft.openSession();
-
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void openSession(AuthenticationSession authenticationSession) {
-        try {
-            isft.openSession(authenticationSession);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void closeSession() {
-        try {
-            isft.closeSession();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/core/legacy/integtestsupport-legacy/test.data b/core/legacy/integtestsupport-legacy/test.data
deleted file mode 100644
index 78b3ff7..0000000
--- a/core/legacy/integtestsupport-legacy/test.data
+++ /dev/null
@@ -1,5 +0,0 @@
-org.apache.isis.core.tck.dom.refs.SimpleEntity#4
-  date: 08-Mar-2010 13:32
-  name: Fred Smith
-  nullable: 
-  size: 0
diff --git a/core/legacy/metamodel-legacy/.gitignore b/core/legacy/metamodel-legacy/.gitignore
deleted file mode 100644
index a48e45b..0000000
--- a/core/legacy/metamodel-legacy/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target-ide
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotation.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotation.java
deleted file mode 100644
index 72a8632..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotation.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.applib.annotation.Encodable;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncoderDecoderUtil;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-public class EncodableFacetAnnotation extends EncodableFacetAbstract {
-
-    private static String encoderDecoderName(final Class<?> annotatedClass, final IsisConfiguration configuration) {
-        final Encodable annotation = annotatedClass.getAnnotation(Encodable.class);
-        final String encoderDecoderName = annotation.encoderDecoderName();
-        if (!Strings.isNullOrEmpty(encoderDecoderName)) {
-            return encoderDecoderName;
-        }
-        return EncoderDecoderUtil.encoderDecoderNameFromConfiguration(annotatedClass, configuration);
-    }
-
-    private static Class<?> encoderDecoderClass(final Class<?> annotatedClass) {
-        final Encodable annotation = annotatedClass.getAnnotation(Encodable.class);
-        return annotation.encoderDecoderClass();
-    }
-
-    public EncodableFacetAnnotation(final Class<?> annotatedClass, final FacetHolder holder, final ServicesInjector servicesInjector) {
-        this(encoderDecoderName(annotatedClass, servicesInjector.getConfigurationServiceInternal()),
-                encoderDecoderClass(annotatedClass), holder, 
-                servicesInjector.getPersistenceSessionServiceInternal(), servicesInjector);
-    }
-
-    private EncodableFacetAnnotation(final String candidateEncoderDecoderName, final Class<?> candidateEncoderDecoderClass, final FacetHolder holder, final ObjectAdapterProvider adapterProvider, final ServicesInjector dependencyInjector) {
-        super(candidateEncoderDecoderName, candidateEncoderDecoderClass, holder, adapterProvider, dependencyInjector);
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
deleted file mode 100644
index 63b22e0..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/annotcfg/EncodableFacetAnnotationElseConfigurationFactory.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg;
-
-import org.apache.isis.applib.annotation.Encodable;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncoderDecoderUtil;
-import org.apache.isis.core.metamodel.progmodel.DeprecatedMarker;
-
-import com.google.common.base.Strings;
-
-/**
- * @deprecated because {@link Encodable} was deprecated
- */
-@Deprecated
-public class EncodableFacetAnnotationElseConfigurationFactory extends FacetFactoryAbstract implements DeprecatedMarker {
-
-    public EncodableFacetAnnotationElseConfigurationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContaxt) {
-        FacetUtil.addFacet(create(processClassContaxt.getCls(), processClassContaxt.getFacetHolder()));
-    }
-
-    /**
-     * Returns a {@link org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet} implementation.
-     */
-    private EncodableFacet create(final Class<?> cls, final FacetHolder holder) {
-
-        // create from annotation, if present
-        final Encodable annotation = Annotations.getAnnotation(cls, Encodable.class);
-        if (annotation != null) {
-            final EncodableFacetAnnotation facet = new EncodableFacetAnnotation(cls, holder, servicesInjector);
-            if (facet.isValid()) {
-                return facet;
-            }
-        }
-
-        // otherwise, try to create from configuration, if present
-        final String encoderDecoderName = EncoderDecoderUtil.encoderDecoderNameFromConfiguration(cls, getConfiguration());
-        if (!Strings.isNullOrEmpty(encoderDecoderName)) {
-            final EncodableFacetFromConfiguration facet = new EncodableFacetFromConfiguration(encoderDecoderName, holder, servicesInjector);
-            if (facet.isValid()) {
-                return facet;
-            }
-        }
-
-        // otherwise, no value semantic
-        return null;
-    }
-
-
-
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java
deleted file mode 100644
index e9a12d7..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
-
-/**
- * Indicates the (column) layout of property groups (as defined by {@link MemberOrderFacet})
- * and collections.
- *
- * <p>
- * Corresponds to the {@link MemberGroupsFacet} annotation in the applib.
- */
-public interface MemberGroupLayoutFacet extends Facet {
-
-    /**
-     * The default group for properties if not otherwise specified.
-     */
-    public final static String DEFAULT_GROUP = "General";
-
-    public ColumnSpans getColumnSpans();
-
-    public List<String> getLeft();
-    public List<String> getMiddle();
-    public List<String> getRight();
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacetAbstract.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacetAbstract.java
deleted file mode 100644
index 4297329..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacetAbstract.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-
-public abstract class MemberGroupLayoutFacetAbstract extends FacetAbstract implements MemberGroupLayoutFacet {
-
-    private final ColumnSpans columns;
-    private final List<String> left;
-    private final List<String> middle;
-    private final List<String> right;
-
-    public static Class<? extends Facet> type() {
-        return MemberGroupLayoutFacet.class;
-    }
-
-    protected static List<String> asListWithDefaultGroup(final String[] value) {
-        return value == null || value.length == 0
-                ? Arrays.asList(MemberGroupLayoutFacet.DEFAULT_GROUP)
-                        : Arrays.asList(value);
-    }
-
-    protected static List<String> asList(final String[] value) {
-        return Arrays.asList(value);
-    }
-
-    public MemberGroupLayoutFacetAbstract(
-            final ColumnSpans columns,
-            final List<String> left, final List<String> middle, final List<String> right,
-            FacetHolder holder) {
-        super(type(), holder, Derivation.NOT_DERIVED);
-        this.columns = columns != null? columns: ColumnSpans.asSpans(4,0,0,8);
-        this.left = left;
-        this.middle = middle;
-        this.right = right;
-    }
-
-    @Override
-    public ColumnSpans getColumnSpans() {
-        return columns;
-    }
-
-    @Override
-    public List<String> getLeft() {
-        return left;
-    }
-
-    @Override
-    public List<String> getMiddle() {
-        return middle;
-    }
-
-    @Override
-    public List<String> getRight() {
-        return right;
-    }
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetAnnotation.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetAnnotation.java
deleted file mode 100644
index 10db2cc..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetAnnotation.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout;
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacetAbstract;
-
-public class MemberGroupLayoutFacetAnnotation extends MemberGroupLayoutFacetAbstract {
-
-    public MemberGroupLayoutFacetAnnotation(
-            final MemberGroupLayout memberGroupLayout,
-            FacetHolder holder) {
-        super(ColumnSpans.asSpans(memberGroupLayout.columnSpans()),
-                asListWithDefaultGroup(memberGroupLayout.left()),
-                asList(memberGroupLayout.middle()),
-                asList(memberGroupLayout.right()),
-                holder);
-    }
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactory.java
deleted file mode 100644
index 5531713..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactory.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout;
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-import org.apache.isis.core.metamodel.progmodel.DeprecatedMarker;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
-import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-
-public class MemberGroupLayoutFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner, DeprecatedMarker {
-
-    public MemberGroupLayoutFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        FacetUtil.addFacet(create(processClassContext));
-    }
-
-    private MemberGroupLayoutFacet create(final ProcessClassContext processClassContext) {
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
-        final Class<?> cls = processClassContext.getCls();
-
-        final MemberGroupLayout mglAnnot = Annotations.getAnnotation(cls, MemberGroupLayout.class);
-        if (mglAnnot != null) {
-            return new MemberGroupLayoutFacetAnnotation(mglAnnot, holder);
-        }
-        return new MemberGroupLayoutFacetFallback(holder);
-    }
-
-    @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
-        metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
-    }
-
-    private Visitor newValidatorVisitor() {
-        return new MetaModelValidatorVisiting.Visitor() {
-
-            @Override
-            public boolean visit(ObjectSpecification objectSpec, ValidationFailures validationFailures) {
-                MemberGroupLayoutFacet facet = objectSpec.getFacet(MemberGroupLayoutFacet.class);
-                ColumnSpans columnSpans = facet.getColumnSpans();
-                final List<String> middle = facet.getMiddle();
-                final List<String> right = facet.getRight();
-                final int numCollections = numCollectionsOf(objectSpec);
-
-                if(columnSpans.getMiddle() == 0 && !middle.isEmpty()) {
-                    validationFailures.add(
-                            "%s: @MemberGroupLayout: middle (property) column is 0 for ColumnSpans (%s), but groups have been listed (%s).  NB: ColumnSpans may have been defaulted if could not be parsed.",
-                            objectSpec.getIdentifier().getClassName(),
-                            columnSpans.name(), middle);
-                }
-                if(columnSpans.getMiddle() > 0 && middle.isEmpty()) {
-                    // ignore; may want a gap, or there may just not be any properties to put in this column.
-                    // validationFailures.add("%s MemberGroupLayout: middle (property) column is non-zero for ColumnSpans (%s), but no groups have been listed", objectSpec.getIdentifier().getClassName(), columnSpans.name());
-                }
-
-                if(columnSpans.getRight() == 0 && !right.isEmpty()) {
-                    validationFailures.add(
-                            "%s: @MemberGroupLayout: right (property) column is 0 for ColumnSpans (%s), but groups have been listed (%s).  NB: ColumnSpans may have been defaulted if could not be parsed.", objectSpec.getIdentifier().getClassName(), columnSpans.name(), right);
-                }
-                if(columnSpans.getRight() > 0 && right.isEmpty()) {
-                    // ignore; may want a gap, or there may just not be any properties to put in this column.
-                    // validationFailures.add("%s MemberGroupLayout: right (property) column is non-zero for ColumnSpans (%s), but no groups have been listed", objectSpec.getIdentifier().getClassName(), columnSpans.name());
-                }
-
-                if(columnSpans.getCollections() == 0 && numCollections>0) {
-                    validationFailures.add(
-                            "%s: @MemberGroupLayout: collections column is 0 for ColumnSpans (%s), but there are (up to) %d visible collections",
-                            objectSpec.getIdentifier().getClassName(), columnSpans.name(), numCollections);
-                }
-                return true;
-            }
-
-            private int numCollectionsOf(ObjectSpecification objectSpec) {
-                List<ObjectAssociation> objectCollections = objectSpec.getAssociations(
-                        Contributed.EXCLUDED, com.google.common.base.Predicates.and(
-                                ObjectAssociation.Predicates.staticallyVisible(Where.OBJECT_FORMS),
-                                ObjectAssociation.Predicates.COLLECTIONS )
-                        );
-                return objectCollections.size();
-            }
-
-        };
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFallback.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFallback.java
deleted file mode 100644
index 74336d4..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacetAbstract;
-
-public class MemberGroupLayoutFacetFallback extends MemberGroupLayoutFacetAbstract {
-
-    public MemberGroupLayoutFacetFallback(final FacetHolder holder) {
-        super(null,
-                Arrays.asList(DEFAULT_GROUP),
-                Collections.<String>emptyList(),
-                Collections.<String>emptyList(),
-                holder);
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetProperties.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetProperties.java
deleted file mode 100644
index f80e96a..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetProperties.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import java.util.ArrayList;
-import java.util.Properties;
-import java.util.stream.Collectors;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacetAbstract;
-
-public class MemberGroupLayoutFacetProperties extends MemberGroupLayoutFacetAbstract {
-
-    public MemberGroupLayoutFacetProperties(
-            final Properties properties,
-            FacetHolder holder) {
-        super(asColumnSpans(properties),
-                asListWithDefaultGroup(asGroupList(properties, "left")),
-                asList(asGroupList(properties, "middle")),
-                asList(asGroupList(properties, "right")),
-                holder);
-    }
-
-    static ColumnSpans asColumnSpans(Properties properties) {
-        String columnSpansStr = properties.getProperty("columnSpans");
-
-        if(columnSpansStr == null) {
-            return null;
-        }
-        try {
-            return ColumnSpans.valueOf(columnSpansStr.trim());
-        } catch(IllegalArgumentException ex) {
-            return null;
-        }
-    }
-
-    static String[] asGroupList(Properties properties, final String key) {
-        final String property = properties.getProperty(key);
-        if(property == null) {
-            return _Strings.emptyArray;
-        }
-
-        return
-                _Strings.splitThenStream(property, ",")
-                .map(_Strings::trim)
-                .filter(_Strings::isNotEmpty)
-                .collect(Collectors.toCollection(ArrayList::new)) // array list for fast to-array conversion
-                .toArray(_Strings.emptyArray);
-
-
-    }
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
deleted file mode 100644
index f667f46..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.parseable.annotcfg;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.applib.annotation.Parseable;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParserUtil;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-public class ParseableFacetAnnotation extends ParseableFacetAbstract {
-
-    private static String parserName(final Class<?> annotatedClass, final IsisConfiguration configuration) {
-        final Parseable annotation = annotatedClass.getAnnotation(Parseable.class);
-        final String parserName = annotation.parserName();
-        if (!Strings.isNullOrEmpty(parserName)) {
-            return parserName;
-        }
-        return ParserUtil.parserNameFromConfiguration(annotatedClass, configuration);
-    }
-
-    private static Class<?> parserClass(final Class<?> annotatedClass) {
-        final Parseable annotation = annotatedClass.getAnnotation(Parseable.class);
-        return annotation.parserClass();
-    }
-
-    public ParseableFacetAnnotation(
-            final Class<?> annotatedClass,
-            final IsisConfiguration configuration,
-            final FacetHolder holder,
-            final ObjectAdapterProvider adapterProvider,
-            final ServicesInjector dependencyInjector) {
-        this(parserName(annotatedClass, configuration), parserClass(annotatedClass), holder,
-                adapterProvider, dependencyInjector);
-    }
-
-    private ParseableFacetAnnotation(
-            final String candidateParserName,
-            final Class<?> candidateParserClass,
-            final FacetHolder holder,
-            final ObjectAdapterProvider adapterProvider,
-            final ServicesInjector dependencyInjector) {
-        super(candidateParserName, candidateParserClass, holder, dependencyInjector);
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
deleted file mode 100644
index 7d82149..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.parseable.annotcfg;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.applib.annotation.Parseable;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParserUtil;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-/**
- * @deprecated because {@link Parseable} was deprecated
- */
-@Deprecated
-public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFactoryAbstract {
-
-    public ParseableFacetAnnotationElseConfigurationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContaxt) {
-        FacetUtil.addFacet(create(processClassContaxt.getCls(), processClassContaxt.getFacetHolder()));
-    }
-
-    private ParseableFacetAbstract create(final Class<?> cls, final FacetHolder holder) {
-        final Parseable annotation = Annotations.getAnnotation(cls, Parseable.class);
-
-        // create from annotation, if present
-        if (annotation != null) {
-            final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getConfiguration(), holder,
-                    adapterProvider, servicesInjector);
-            if (facet.isValid()) {
-                return facet;
-            }
-        }
-
-        // otherwise, try to create from configuration, if present
-        final String parserName = ParserUtil.parserNameFromConfiguration(cls, getConfiguration());
-        if (!Strings.isNullOrEmpty(parserName)) {
-            final ParseableFacetFromConfiguration facet = new ParseableFacetFromConfiguration(parserName, holder,
-                    servicesInjector, adapterProvider);
-            if (facet.isValid()) {
-                return facet;
-            }
-        }
-
-        return null;
-    }
-
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        adapterProvider = servicesInjector.getPersistenceSessionServiceInternal();
-    }
-
-    ObjectAdapterProvider adapterProvider;
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueFacetUsingSemanticsProviderFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index f405ad7..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.date;
-
-import org.apache.isis.applib.value.Date;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class DateValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<Date> {
-
-    public DateValueFacetUsingSemanticsProviderFactory() {
-        super(); // as per inherited
-                                     // DateTimeValueSemanticsProvider#facetType
-        // (inherited)
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Class<?> type = processClassContext.getCls();
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
-        if (type != org.apache.isis.applib.value.Date.class) {
-            return;
-        }
-        addFacets(new DateValueSemanticsProvider(holder, getContext()));
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProvider.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProvider.java
deleted file mode 100644
index 998ceef..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProvider.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.date;
-
-import java.util.Date;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-
-public class DateValueSemanticsProvider extends DateValueSemanticsProviderAbstract<org.apache.isis.applib.value.Date> {
-
-    // no default
-    private static final org.apache.isis.applib.value.Date DEFAULT_VALUE = null; 
-
-
-    /**
-     * Required because implementation of {@link Parser} and
-     * {@link EncoderDecoder}.
-     */
-    public DateValueSemanticsProvider() {
-        this(null, null);
-    }
-
-    public DateValueSemanticsProvider(final FacetHolder holder, final ServicesInjector context) {
-        super(holder, org.apache.isis.applib.value.Date.class, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, context);
-    }
-
-    @Override
-    protected org.apache.isis.applib.value.Date add(final org.apache.isis.applib.value.Date original, final int years, final int months, final int days, final int hours, final int minutes) {
-        final org.apache.isis.applib.value.Date date = original;
-        return date.add(years, months, days);
-    }
-
-    @Override
-    protected org.apache.isis.applib.value.Date now() {
-        return new org.apache.isis.applib.value.Date();
-    }
-
-    @Override
-    protected Date dateValue(final Object value) {
-        return ((org.apache.isis.applib.value.Date) value).dateValue();
-    }
-
-    @Override
-    protected org.apache.isis.applib.value.Date setDate(final Date date) {
-        return new org.apache.isis.applib.value.Date(date);
-    }
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueFacetUsingSemanticsProviderFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index fa14f05..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.datetime;
-
-import org.apache.isis.applib.value.DateTime;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class DateTimeValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<DateTime> {
-
-    public DateTimeValueFacetUsingSemanticsProviderFactory() {
-        super(); // as per inherited
-                                     // DateTimeValueSemanticsProvider#facetType
-        // (inherited)
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Class<?> type = processClassContext.getCls();
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
-        if (type != org.apache.isis.applib.value.DateTime.class) {
-            return;
-        }
-        addFacets(new DateTimeValueSemanticsProvider(holder, getContext()));
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueSemanticsProvider.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueSemanticsProvider.java
deleted file mode 100644
index f408138..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/datetime/DateTimeValueSemanticsProvider.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.datetime;
-
-import java.util.Date;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.value.DateTime;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-import org.apache.isis.core.metamodel.facets.value.DateAndTimeValueSemanticsProviderAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-public class DateTimeValueSemanticsProvider extends DateAndTimeValueSemanticsProviderAbstract<DateTime> {
-
-    /**
-     * Required because implementation of {@link Parser} and
-     * {@link EncoderDecoder}.
-     */
-    public DateTimeValueSemanticsProvider() {
-        this(null, null);
-    }
-
-    public DateTimeValueSemanticsProvider(final FacetHolder holder, final ServicesInjector context) {
-        super(holder, DateTime.class, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, context);
-    }
-
-    @Override
-    protected Date dateValue(final Object value) {
-        final DateTime date = (DateTime) value;
-        return date == null ? null : date.dateValue();
-    }
-
-    @Override
-    protected DateTime add(final DateTime original, final int years, final int months, final int days, final int hours, final int minutes) {
-        DateTime date = original;
-        date = date.add(years, months, days, hours, minutes);
-        return date;
-    }
-
-    @Override
-    protected DateTime now() {
-        return new DateTime();
-    }
-
-    @Override
-    protected DateTime setDate(final Date date) {
-        return new DateTime(date);
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueFacetUsingSemanticsProviderFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index 60c7005..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.time;
-
-import org.apache.isis.applib.value.Time;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class TimeValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<Time> {
-
-    public TimeValueFacetUsingSemanticsProviderFactory() {
-        super(); // as per inherited
-                                     // DateTimeValueSemanticsProvider#facetType
-        // (inherited)
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Class<?> type = processClassContext.getCls();
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
-        if (type != org.apache.isis.applib.value.Time.class) {
-            return;
-        }
-        addFacets(new TimeValueSemanticsProvider(holder, getContext()));
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProvider.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProvider.java
deleted file mode 100644
index 773c105..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.time;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.value.Time;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-
-public class TimeValueSemanticsProvider extends TimeValueSemanticsProviderAbstract<org.apache.isis.applib.value.Time> {
-
-    private static final Map<String, DateFormat> formats = Maps.newHashMap();
-
-    static {
-        initFormats(formats);
-    }
-
-    /**
-     * Required because implementation of {@link Parser} and
-     * {@link EncoderDecoder}.
-     */
-    public TimeValueSemanticsProvider() {
-        this(null, null);
-    }
-
-    public TimeValueSemanticsProvider(final FacetHolder holder, final ServicesInjector context) {
-        super(holder, org.apache.isis.applib.value.Time.class, context);
-    }
-
-    @Override
-    protected Map<String, DateFormat> formats() {
-        return formats;
-    }
-
-    @Override
-    protected boolean ignoreTimeZone() {
-        return true;
-    }
-
-    @Override
-    protected Time add(final Time original, final int years, final int months, final int days, final int hours, final int minutes) {
-        Time time = original;
-        time = time.add(hours, minutes);
-        return time;
-    }
-
-    @Override
-    protected Date dateValue(final Object object) {
-        final Time time = (Time) object;
-        return time == null ? null : time.asJavaDate();
-    }
-
-    @Override
-    protected Time now() {
-        return new Time();
-    }
-
-    @Override
-    protected Time setDate(final Date date) {
-        return new Time(date.getTime());
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueFacetUsingSemanticsProviderFactory.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index c8e610f..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.timestamp;
-
-import org.apache.isis.applib.value.TimeStamp;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class TimeStampValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<TimeStamp> {
-
-    public TimeStampValueFacetUsingSemanticsProviderFactory() {
-        super(); // as per inherited
-                                     // DateTimeValueSemanticsProvider#facetType
-        // (inherited)
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Class<?> type = processClassContext.getCls();
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
-        if (type != org.apache.isis.applib.value.TimeStamp.class) {
-            return;
-        }
-        addFacets(new TimeStampValueSemanticsProvider(holder, getContext()));
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProvider.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProvider.java
deleted file mode 100644
index 3afc3bd..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProvider.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.timestamp;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.value.TimeStamp;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.InvalidEntryException;
-import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-
-public class TimeStampValueSemanticsProvider extends TimeStampValueSemanticsProviderAbstract<TimeStamp> {
-
-    public static final boolean isAPropertyDefaultFacet() {
-        return PropertyDefaultFacet.class.isAssignableFrom(TimeStampValueSemanticsProvider.class);
-    }
-
-    private static Map<String, DateFormat> formats = Maps.newHashMap();
-
-    static {
-        initFormats(formats);
-    }
-
-    /**
-     * Required because implementation of {@link Parser} and
-     * {@link EncoderDecoder}.
-     */
-    public TimeStampValueSemanticsProvider() {
-        this(null, null);
-    }
-
-    public TimeStampValueSemanticsProvider(final FacetHolder holder, final ServicesInjector context) {
-        super(holder, TimeStamp.class, context);
-    }
-
-    // //////////////////////////////////////////////////////////////////
-    // temporal-specific stuff
-    // //////////////////////////////////////////////////////////////////
-
-    @Override
-    protected Date dateValue(final Object value) {
-        return new Date(((TimeStamp) value).longValue());
-    }
-
-    @Override
-    protected Map<String, DateFormat> formats() {
-        return formats;
-    }
-
-    @Override
-    protected TimeStamp now() {
-        throw new InvalidEntryException("Can't change a timestamp.");
-    }
-
-    @Override
-    protected TimeStamp setDate(final Date date) {
-        return new TimeStamp(date.getTime());
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProviderAbstract.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProviderAbstract.java
deleted file mode 100644
index f285b6e..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestamp/TimeStampValueSemanticsProviderAbstract.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.value.timestamp;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-
-import org.apache.isis.applib.value.TimeStamp;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-
-public abstract class TimeStampValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAbstractTemporal<T> {
-
-    private static final Object DEFAULT_VALUE = null; // no default
-    private static final int TYPICAL_LENGTH = 25;
-
-    protected static void initFormats(final Map<String, DateFormat> formats) {
-        formats.put(ISO_ENCODING_FORMAT, createDateEncodingFormat("yyyyMMdd'T'HHmmssSSS")); 
-        formats.put("short", DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG));
-    }
-
-    @SuppressWarnings("unchecked")
-    public TimeStampValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final ServicesInjector context) {
-        super("timestamp", holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE, context);
-        final String formatRequired = getConfiguration().getString(ConfigurationConstants.ROOT + "value.format.timestamp");
-        if (formatRequired == null) {
-            format = formats().get(defaultFormat());
-        } else {
-            setMask(formatRequired);
-        }
-    }
-
-    @Override
-    protected T add(final T original, final int years, final int months, final int days, final int hours, final int minutes) {
-        return original;
-    }
-
-    @Override
-    protected Date dateValue(final Object value) {
-        return new Date(((TimeStamp) value).longValue());
-    }
-
-    @Override
-    protected String defaultFormat() {
-        return "short";
-    }
-
-    @Override
-    public String toString() {
-        return "TimeStampValueSemanticsProvider: " + format;
-    }
-
-    @Override
-    protected DateFormat format() {
-
-        final Locale locale = Locale.getDefault();
-        final TimeZone timeZone = TimeZone.getDefault();
-
-        final DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale);
-        dateFormat.setTimeZone(timeZone);
-
-        return dateFormat;
-    }
-
-    protected List<DateFormat> formatsToTry() {
-        final List<DateFormat> formats = new ArrayList<DateFormat>();
-
-        final Locale locale = Locale.getDefault();
-        final TimeZone timeZone = TimeZone.getDefault();
-
-        formats.add(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, locale));
-        formats.add(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale));
-        formats.add(createDateFormat("yyyy-MM-dd HH:mm:ss.SSS"));
-
-        for (final DateFormat format : formats) {
-            format.setTimeZone(timeZone);
-        }
-
-        return formats;
-    }
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
deleted file mode 100644
index 08c03b8..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.services.container;
-
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.PersistFailedException;
-import org.apache.isis.applib.RepositoryException;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-
-@DomainService(
-        nature = NatureOfService.DOMAIN,
-        menuOrder = "" + Integer.MAX_VALUE
-)
-public class DomainObjectContainerDefault implements DomainObjectContainer {
-
-
-    // -- newViewModelInstance
-
-    @Programmatic
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T> T newViewModelInstance(Class<T> ofClass, String memento) {
-        final ObjectSpecification spec = specificationLoader.loadSpecification(ofClass);
-        if (!spec.containsFacet(ViewModelFacet.class)) {
-            throw new IsisException("Type must be a ViewModel: " + ofClass);
-        }
-        final ObjectAdapter adapter = persistenceSessionServiceInternal.createViewModelInstance(spec, memento);
-        if(adapter.getOid().isViewModel()) {
-            return (T)adapter.getObject();
-        } else {
-            throw new IsisException("Object instantiated but was not given a ViewModel Oid; please report as a possible defect in Isis: " + ofClass);
-        }
-    }
-
-    
-
-    // --  remove
-
-    @Programmatic
-    @Override
-    public void remove(final Object persistentObject) {
-        if (persistentObject == null) {
-            throw new IllegalArgumentException("Must specify a reference for disposing an object");
-        }
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(persistentObject));
-        if (!repositoryService.isPersistent(persistentObject)) {
-            throw new RepositoryException("Object not persistent: " + adapter);
-        }
-
-        persistenceSessionServiceInternal.remove(adapter);
-    }
-
-    
-
-
-    // -- resolve, objectChanged (DEPRECATED)
-
-    /**
-     * Re-initialises the fields of an object, using the
-     * JDO {@link javax.jdo.PersistenceManager#refresh(Object) refresh} API.
-     *
-     * <p>
-     *     Previously this method was provided for manual control of lazy loading; with the JDO/DataNucleus objectstore
-     *     that original functionality is performed automatically by the framework.
-     * </p>
-     *
-     * @deprecated - equivalent to {@link org.apache.isis.applib.services.jdosupport.IsisJdoSupport#refresh(Object)}.
-     */
-    @Programmatic
-    @Deprecated
-    @Override
-    public void resolve(final Object parent) {
-        persistenceSessionServiceInternal.resolve(unwrapped(parent));
-    }
-
-    /**
-     * Provided that the <tt>field</tt> parameter is <tt>null</tt>, re-initialises the fields of an object, using the
-     * JDO {@link javax.jdo.PersistenceManager#refresh(Object) refresh} API.
-     *
-     * <p>
-     *     Previously this method was provided for manual control of lazy loading; with the JDO/DataNucleus objectstore
-     *     that original functionality is performed automatically by the framework.
-     * </p>
-     *
-     * @deprecated - equivalent to {@link org.apache.isis.applib.services.jdosupport.IsisJdoSupport#refresh(Object)}.
-     */
-    @Programmatic
-    @Deprecated
-    @Override
-    public void resolve(final Object parent, final Object field) {
-        persistenceSessionServiceInternal.resolve(unwrapped(parent), field);
-    }
-
-    /**
-     * @deprecated - no-op.
-     */
-    @Deprecated
-    @Programmatic
-    @Override
-    public void objectChanged(final Object object) {
-    }
-
-    
-
-    // -- commit (deprecated)
-
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    @Programmatic
-    @Override
-    public void commit() {
-        persistenceSessionServiceInternal.commit();
-    }
-
-    
-
-    // -- isValid, validate
-
-    @Programmatic
-    @Override
-    public boolean isValid(final Object domainObject) {
-        return validate(domainObject) == null;
-    }
-
-    @Programmatic
-    @Override
-    public String validate(final Object domainObject) {
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(domainObject));
-        final InteractionResult validityResult =
-                adapter.getSpecification().isValidResult(adapter, InteractionInitiatedBy.FRAMEWORK);
-        return validityResult.getReason();
-    }
-
-    
-
-
-    // -- isViewModel
-
-    @Programmatic
-    @Override
-    public boolean isViewModel(final Object domainObject) {
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(domainObject));
-        return adapter.getSpecification().isViewModel();
-    }
-    
-
-    // -- persistence
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Programmatic
-    @Override
-    public void persist(final Object domainObject) {
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(domainObject));
-
-        if(adapter == null) {
-            throw new PersistFailedException("Object not known to framework; instantiate using newTransientInstance(...) rather than simply new'ing up.");
-        }
-        if (adapter.isParentedCollection()) {
-            // TODO check aggregation is supported
-            return;
-        }
-        if (repositoryService.isPersistent(domainObject)) {
-            throw new PersistFailedException("Object already persistent; OID=" + adapter.getOid());
-        }
-        persistenceSessionServiceInternal.makePersistent(adapter);
-    }
-
-
-    
-
-
-
-
-    // //////////////////////////////////////////////////////////////////
-
-
-
-
-    // -- helpers
-
-    private Object unwrapped(Object domainObject) {
-        return wrapperFactory != null ? wrapperFactory.unwrap(domainObject) : domainObject;
-    }
-    
-    private ObjectAdapterProvider getObjectAdapterProvider() {
-        return persistenceSessionServiceInternal;
-    }
-
-    // -- service dependencies
-
-    @javax.inject.Inject
-    SpecificationLoader specificationLoader;
-
-    @javax.inject.Inject
-    RepositoryService repositoryService;
-
-    @javax.inject.Inject
-    WrapperFactory wrapperFactory;
-
-    @javax.inject.Inject
-    PersistenceSessionServiceInternal persistenceSessionServiceInternal;
-
-    
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/grid/fixedcols/applib/Hint.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/grid/fixedcols/applib/Hint.java
deleted file mode 100644
index fd2ea70..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/grid/fixedcols/applib/Hint.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.services.grid.fixedcols.applib;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout;
-
-@Deprecated
-public enum Hint {
-    LEFT,
-    MIDDLE,
-    RIGHT;
-
-    public int from(MemberGroupLayout.ColumnSpans columnSpans) {
-        if (this == LEFT)
-            return columnSpans.getLeft();
-        if (this == MIDDLE)
-            return columnSpans.getMiddle();
-        if (this == RIGHT)
-            return columnSpans.getRight();
-        throw new IllegalStateException();
-    }
-
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceLegacyInternalDefault.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceLegacyInternalDefault.java
deleted file mode 100644
index f5ba840..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceLegacyInternalDefault.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.services.repository;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.PostConstruct;
-
-import org.apache.isis.applib.PersistFailedException;
-import org.apache.isis.applib.RepositoryException;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.applib.query.QueryFindAllInstances;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.repository.RepositoryServiceLegacy;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
-
-/**
- * 
- * Legacy Service default implementation to ease transition from Isis 1.x to 2.x.
- *
- */
-@DomainService(
-        nature = NatureOfService.DOMAIN,
-        menuOrder = "" + Integer.MAX_VALUE
-)
-public class RepositoryServiceLegacyInternalDefault implements RepositoryServiceLegacy {
-
-    private boolean autoFlush;
-
-    @Programmatic
-    @PostConstruct
-    public void init(Map<String, String> properties) {
-        final boolean disableAutoFlush = Boolean.parseBoolean(properties.get(KEY_DISABLE_AUTOFLUSH));
-        this.autoFlush = !disableAutoFlush;
-    }
-
-
-    // //////////////////////////////////////
-
-    @Programmatic
-    @Override
-    public <T> T instantiate(final Class<T> domainClass) {
-        return factoryService.instantiate(domainClass);
-    }
-
-    // //////////////////////////////////////
-
-    @Programmatic
-    @Override
-    public boolean isPersistent(final Object domainObject) {
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(domainObject));
-        return adapter.representsPersistent();
-    }
-
-    @Programmatic
-    @Override
-    public <T> T persist(final T object) {
-        if (isPersistent(object)) {
-            return object;
-        }
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(object));
-
-        if(adapter == null) {
-            throw new PersistFailedException("Object not known to framework (unable to create/obtain an adapter)");
-        }
-        if (adapter.isParentedCollection()) {
-            // TODO check aggregation is supported
-            return  object;
-        }
-        if (isPersistent(object)) {
-            throw new PersistFailedException("Object already persistent; OID=" + adapter.getOid());
-        }
-        persistenceSessionServiceInternal.makePersistent(adapter);
-
-        return object;
-    }
-    
-    @Programmatic
-    @Override
-    public <T> T persistAndFlush(final T object) {
-        persist(object);
-        transactionService.flushTransaction();
-        return object;
-    }
-
-    @Override
-    @Programmatic
-    public void remove(final Object domainObject) {
-        removeIfNotAlready(domainObject);
-    }
-
-    private void removeIfNotAlready(final Object object) {
-        if (!isPersistent(object)) {
-            return;
-        }
-        if (object == null) {
-            throw new IllegalArgumentException("Must specify a reference for disposing an object");
-        }
-        final ObjectAdapter adapter = getObjectAdapterProvider().adapterFor(unwrapped(object));
-        if (!isPersistent(object)) {
-            throw new RepositoryException("Object not persistent: " + adapter);
-        }
-
-        persistenceSessionServiceInternal.remove(adapter);
-    }
-    
-    @Override
-    @Programmatic
-    public void removeAndFlush(final Object domainObject) {
-        remove(domainObject);
-	transactionService.flushTransaction();
-    }
-
-
-    // //////////////////////////////////////
-
-
-    // -- allInstances, allMatches, uniqueMatch, firstMatch
-
-    @Programmatic
-    @Override
-    public <T> List<T> allInstances(final Class<T> type, long... range) {
-        return allMatches(new QueryFindAllInstances<T>(type, range));
-    }
-
-    // //////////////////////////////////////
-
-    @Programmatic
-    @Override
-    public <T> List<T> allMatches(final Class<T> cls, final com.google.common.base.Predicate<? super T> predicate, long... range) {
-        final List<T> allInstances = allInstances(cls, range);
-        final List<T> filtered = new ArrayList<T>();
-        for (final T instance : allInstances) {
-            if (predicate.apply(instance)) {
-                filtered.add(instance);
-            }
-        }
-        return filtered;
-    }
-    
-    @Programmatic
-    @Override
-    public <T> List<T> allMatches(final Query<T> query) {
-        if(autoFlush) {
-            transactionService.flushTransaction();
-        }
-        return submitQuery(query);
-    }
-
-    <T> List<T> submitQuery(final Query<T> query) {
-        final List<ObjectAdapter> allMatching = persistenceSessionServiceInternal.allMatchingQuery(query);
-        return ObjectAdapter.Util.unwrapT(allMatching);
-    }
-    
-
-    // //////////////////////////////////////
-
-
-    @Programmatic
-    @Override
-    public <T> T uniqueMatch(final Class<T> type, final com.google.common.base.Predicate<T> predicate) {
-        final List<T> instances = allMatches(type, predicate, 0, 2); // No need to fetch more than 2.
-        if (instances.size() > 1) {
-            throw new RepositoryException("Found more than one instance of " + type + " matching filter " + predicate);
-        }
-        return firstInstanceElseNull(instances);
-    }
-
-    @Programmatic
-    @Override
-    public <T> T uniqueMatch(final Query<T> query) {
-        final List<T> instances = allMatches(query); // No need to fetch more than 2.
-        if (instances.size() > 1) {
-            throw new RepositoryException("Found more that one instance for query:" + query.getDescription());
-        }
-        return firstInstanceElseNull(instances);
-    }
-
-
-    // //////////////////////////////////////
-
-
-    @Programmatic
-    @Override
-    public <T> T firstMatch(final Class<T> cls, final com.google.common.base.Predicate<T> predicate) {
-        final List<T> allInstances = allInstances(cls); // Have to fetch all, as matching is done in next loop
-        for (final T instance : allInstances) {
-            if (predicate.apply(instance)) {
-                return instance;
-            }
-        }
-        return null;
-    }
-
-    @Programmatic
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T> T firstMatch(final Query<T> query) {
-        if(autoFlush) {
-            transactionService.flushTransaction();
-        }
-        final ObjectAdapter firstMatching = persistenceSessionServiceInternal.firstMatchingQuery(query);
-        return (T) ObjectAdapter.Util.unwrap(firstMatching);
-    }
-
-
-    // //////////////////////////////////////
-
-
-    private static <T> T firstInstanceElseNull(final List<T> instances) {
-        return instances.size() == 0 ? null : instances.get(0);
-    }
-
-
-    private Object unwrapped(Object domainObject) {
-        return wrapperFactory != null ? wrapperFactory.unwrap(domainObject) : domainObject;
-    }
-
-    private ObjectAdapterProvider getObjectAdapterProvider() {
-        return persistenceSessionServiceInternal;
-    }
-
-    @javax.inject.Inject
-    FactoryService factoryService;
-
-    @javax.inject.Inject
-    WrapperFactory wrapperFactory;
-
-    @javax.inject.Inject
-    TransactionService transactionService;
-
-    @javax.inject.Inject
-    PersistenceSessionServiceInternal persistenceSessionServiceInternal;
-
-
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/swagger/plugins/IsisTimeValuePropertyPlugin.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/swagger/plugins/IsisTimeValuePropertyPlugin.java
deleted file mode 100644
index f15314e..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/services/swagger/plugins/IsisTimeValuePropertyPlugin.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.isis.core.metamodel.services.swagger.plugins;
-
-import org.apache.isis.core.metamodel.services.swagger.internal.ValuePropertyPlugin;
-
-import io.swagger.models.properties.DateProperty;
-import io.swagger.models.properties.DateTimeProperty;
-
-public class IsisTimeValuePropertyPlugin implements ValuePropertyPlugin {
-
-	@Override
-	public void plugin(ValuePropertyCollector collector) {
-
-		collector.addValueProperty(org.apache.isis.applib.value.DateTime.class, DateTimeProperty::new);
-		collector.addValueProperty(org.apache.isis.applib.value.Date.class, DateProperty::new);
-		
-	}
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
deleted file mode 100644
index f425520..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.spec;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.Hint;
-
-public final class ObjectSpecifications {
-
-    private ObjectSpecifications() {
-    }
-
-    public static List<String> orderByMemberGroups(
-            final ObjectSpecification objSpec,
-            final Set<String> groupNamesToOrder,
-            final Hint hint) {
-
-        final MemberGroupLayoutFacet facet = objSpec.getFacet(MemberGroupLayoutFacet.class);
-        final List<String> leftColumnGroupNames = Lists.newArrayList(groupNamesToOrder);
-
-        // not expected to happen
-        if(facet == null) {
-            return leftColumnGroupNames;
-        }
-
-        if(hint == Hint.MIDDLE) {
-            return facet.getColumnSpans().getMiddle()>0? facet.getMiddle(): Collections.<String>emptyList();
-        }
-        if(hint == Hint.RIGHT) {
-            return facet.getColumnSpans().getRight()>0? facet.getRight(): Collections.<String>emptyList();
-        }
-
-        // else left; per the requested order, including any groups not mentioned in either list,
-        // but excluding any groups in the middle or right columns
-        final List<String> groupNamedInRequiredOrder = facet.getLeft();
-        final List<String> order = order(leftColumnGroupNames, groupNamedInRequiredOrder);
-
-        if(facet.getColumnSpans().getMiddle() > 0) {
-            order.removeAll(facet.getMiddle());
-        }
-        if(facet.getColumnSpans().getRight() > 0) {
-            order.removeAll(facet.getRight());
-        }
-        return order;
-    }
-
-    static List<String> order(final List<String> valuesToOrder, final List<String> valuesInRequiredOrder) {
-        int i=0;
-        for(String memberGroup: valuesInRequiredOrder) {
-            if(valuesToOrder.contains(memberGroup)) {
-                // move to next position
-                valuesToOrder.remove(memberGroup);
-                valuesToOrder.add(i++, memberGroup);
-            }
-        }
-
-        return valuesToOrder;
-    }
-
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelLegacyPlugin.java b/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelLegacyPlugin.java
deleted file mode 100644
index 0c305d0..0000000
--- a/core/legacy/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelLegacyPlugin.java
+++ /dev/null
@@ -1,46 +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.progmodels.plugins;
-
-import org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg.EncodableFacetAnnotationElseConfigurationFactory;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.parseable.annotcfg.ParseableFacetAnnotationElseConfigurationFactory;
-import org.apache.isis.core.metamodel.facets.value.date.DateValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.datetime.DateTimeValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.time.TimeValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin;
-
-public class ProgrammingModelLegacyPlugin implements ProgrammingModelPlugin {
-
-	@Override
-	public void plugin(FactoryCollector collector) {
-	    
-	    collector.addFactory(new MemberGroupLayoutFacetFactory(), FacetFactoryCategory.VALUE);
-		
-		collector.addFactory(new DateValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
-		collector.addFactory(new DateTimeValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
-        
-		collector.addFactory(new TimeStampValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
-		collector.addFactory(new TimeValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
-
-		collector.addFactory(new EncodableFacetAnnotationElseConfigurationFactory(), FacetFactoryCategory.VALUE);
-		collector.addFactory(new ParseableFacetAnnotationElseConfigurationFactory(), FacetFactoryCategory.VALUE);
-		
-	}
-
-}
diff --git a/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin b/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin
deleted file mode 100644
index f62c316e..0000000
--- a/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.isis.progmodels.plugins.ProgrammingModelLegacyPlugin
\ No newline at end of file
diff --git a/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.services.swagger.internal.ValuePropertyPlugin b/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.services.swagger.internal.ValuePropertyPlugin
deleted file mode 100644
index 9161c26..0000000
--- a/core/legacy/metamodel-legacy/src/main/resources/META-INF/services/org.apache.isis.core.metamodel.services.swagger.internal.ValuePropertyPlugin
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.isis.core.metamodel.services.swagger.plugins.IsisTimeValuePropertyPlugin
\ No newline at end of file
diff --git a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java b/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
deleted file mode 100644
index 23cba46..0000000
--- a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.encodable;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.annotation.Encodable;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncoderDecoderUtil;
-import org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg.EncodableFacetAnnotationElseConfigurationFactory;
-
-public class EncodableFacetFactoryTest extends AbstractFacetFactoryTest {
-
-    private EncodableFacetAnnotationElseConfigurationFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new EncodableFacetAnnotationElseConfigurationFactory();
-
-        facetFactory.setServicesInjector(stubServicesInjector);
-
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    public void testFacetPickedUp() {
-
-        facetFactory.process(new ProcessClassContext(MyEncodableUsingEncoderDecoderName.class, methodRemover, facetedMethod));
-
-        final EncodableFacet facet = facetedMethod.getFacet(EncodableFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof EncodableFacetAbstract);
-    }
-
-    public void testFacetFacetHolderStored() {
-
-        facetFactory.process(new ProcessClassContext(MyEncodableUsingEncoderDecoderName.class, methodRemover, facetedMethod));
-
-        final EncodableFacetAbstract valueFacet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertEquals(facetedMethod, valueFacet.getFacetHolder());
-    }
-
-    public void testNoMethodsRemoved() {
-
-        facetFactory.process(new ProcessClassContext(MyEncodableUsingEncoderDecoderName.class, methodRemover, facetedMethod));
-
-        assertNoMethodsRemoved();
-    }
-
-    abstract static class EncoderDecoderNoop<T> implements EncoderDecoder<T> {
-
-        @Override
-        public T fromEncodedString(final String encodedString) {
-            return null;
-        }
-
-        @Override
-        public String toEncodedString(final T toEncode) {
-            return null;
-        }
-    }
-
-    @Encodable(encoderDecoderName = "org.apache.isis.core.metamodel.facets.object.encodable.EncodableFacetFactoryTest$MyEncodableUsingEncoderDecoderName")
-    public static class MyEncodableUsingEncoderDecoderName extends EncoderDecoderNoop<MyEncodableUsingEncoderDecoderName> {
-
-        /**
-         * Required since is an EncoderDecoder
-         */
-        public MyEncodableUsingEncoderDecoderName() {
-        }
-
-    }
-
-    public void testEncodeableUsingEncoderDecoderName() {
-
-        facetFactory.process(new ProcessClassContext(MyEncodableUsingEncoderDecoderName.class, methodRemover, facetedMethod));
-
-        final EncodableFacetAbstract encodeableFacet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertEquals(MyEncodableUsingEncoderDecoderName.class, encodeableFacet.getEncoderDecoderClass());
-    }
-
-    @Encodable(encoderDecoderClass = MyEncodeableUsingEncoderDecoderClass.class)
-    public static class MyEncodeableUsingEncoderDecoderClass extends EncoderDecoderNoop<MyEncodeableUsingEncoderDecoderClass> {
-
-        /**
-         * Required since is a EncoderDecoder.
-         */
-        public MyEncodeableUsingEncoderDecoderClass() {
-        }
-
-    }
-
-    public void testEncodeableUsingEncoderDecoderClass() {
-
-        facetFactory.process(new ProcessClassContext(MyEncodeableUsingEncoderDecoderClass.class, methodRemover, facetedMethod));
-
-        final EncodableFacetAbstract encodeableFacet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertEquals(MyEncodeableUsingEncoderDecoderClass.class, encodeableFacet.getEncoderDecoderClass());
-    }
-
-    public void testEncodeableMustBeAEncoderDecoder() {
-        // no test, because compiler prevents us from nominating a class that
-        // doesn't
-        // implement EncoderDecoder
-    }
-
-    @Encodable(encoderDecoderClass = MyEncodeableWithoutNoArgConstructor.class)
-    public static class MyEncodeableWithoutNoArgConstructor extends EncoderDecoderNoop<MyEncodeableWithoutNoArgConstructor> {
-
-        // no no-arg constructor
-
-        public MyEncodeableWithoutNoArgConstructor(final int value) {
-        }
-
-    }
-
-    public void testEncodeableHaveANoArgConstructor() {
-        facetFactory.process(new ProcessClassContext(MyEncodeableWithoutNoArgConstructor.class, methodRemover, facetedMethod));
-
-        final EncodableFacetAbstract encodeableFacet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertNull(encodeableFacet);
-    }
-
-    @Encodable(encoderDecoderClass = MyEncodeableWithoutPublicNoArgConstructor.class)
-    public static class MyEncodeableWithoutPublicNoArgConstructor extends EncoderDecoderNoop<MyEncodeableWithoutPublicNoArgConstructor> {
-
-        // no public no-arg constructor
-        MyEncodeableWithoutPublicNoArgConstructor() {
-        }
-
-        public MyEncodeableWithoutPublicNoArgConstructor(final int value) {
-        }
-
-    }
-
-    public void testEncodeableHaveAPublicNoArgConstructor() {
-        facetFactory.process(new ProcessClassContext(MyEncodeableWithoutPublicNoArgConstructor.class, methodRemover, facetedMethod));
-
-        final EncodableFacetAbstract encodeableFacet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertNull(encodeableFacet);
-    }
-
-    @Encodable()
-    public static class MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration extends EncoderDecoderNoop<MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration> {
-
-        /**
-         * Required since is a EncoderDecoder.
-         */
-        public MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration() {
-        }
-    }
-
-    public void testEncoderDecoderNameCanBePickedUpFromConfiguration() {
-        final String className = "org.apache.isis.core.metamodel.facets.object.encodable.EncodableFacetFactoryTest$MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration";
-        stubConfiguration.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
-        facetFactory.process(new ProcessClassContext(MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-        final EncodableFacetAbstract facet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertNotNull(facet);
-        assertEquals(MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration.class, facet.getEncoderDecoderClass());
-    }
-
-    public static class NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration extends EncoderDecoderNoop<NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration> {
-
-        /**
-         * Required since is a EncoderDecoder.
-         */
-        public NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration() {
-        }
-    }
-
-    public void testNonAnnotatedEncodeableCanPickUpEncoderDecoderFromConfiguration() {
-        final String className = "org.apache.isis.core.metamodel.facets.object.encodable.EncodableFacetFactoryTest$NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration";
-        stubConfiguration.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
-        facetFactory.process(new ProcessClassContext(NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-        final EncodableFacetAbstract facet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
-        assertNotNull(facet);
-        assertEquals(NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration.class, facet.getEncoderDecoderClass());
-    }
-
-    private String canonical(final String className) {
-        return className.replace('$', '.');
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java b/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
deleted file mode 100644
index 184bc17..0000000
--- a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout;
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-
-public class MemberGroupLayoutFacetFactoryTest extends AbstractFacetFactoryTest {
-
-    private MemberGroupLayoutFacetFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new MemberGroupLayoutFacetFactory();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    @MemberGroupLayout(
-            left={"General","Foo", "Bar"}, 
-            middle={"Baz", "Boz"}, 
-            right={"Flip", "Flop"}, 
-            columnSpans={2,4,6,0})
-    public static class ClassWithMemberGroupLayoutAnnotation {
-        
-    }
-
-    @MemberGroupLayout(
-            left={"General","Foo", "Bar"}, 
-            middle={"Baz", "Boz"}, 
-            columnSpans={2,4,0,6})
-    public static class ClassWithMemberGroupLayoutAndMemberGroupsAnnotation {
-        
-    }
-
-    public static class ClassWithMemberGroupsAnnotation {
-        
-    }
-    
-    public static class ClassWithMemberGroupsAnnotationButNoGroupsNamed {
-    }
-    
-    public static class ClassWithoutMemberGroupsAnnotation {
-    }
-    
-
-    public void testWithMemberGroupLayout() {
-        facetFactory.process(new ProcessClassContext(ClassWithMemberGroupLayoutAnnotation.class, methodRemover, facetHolder));
-
-        final Facet facet = facetHolder.getFacet(MemberGroupLayoutFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof MemberGroupLayoutFacetAnnotation);
-        final MemberGroupLayoutFacetAnnotation memberGroupsFacet = (MemberGroupLayoutFacetAnnotation) facet;
-        final List<String> leftNames = memberGroupsFacet.getLeft();
-        final List<String> middleNames = memberGroupsFacet.getMiddle();
-        final List<String> rightNames = memberGroupsFacet.getRight();
-        final ColumnSpans columnSpans = memberGroupsFacet.getColumnSpans();
-        assertEquals(Arrays.asList("General", "Foo", "Bar"), leftNames);
-        assertEquals(Arrays.asList("Baz", "Boz"), middleNames);
-        assertEquals(Arrays.asList("Flip", "Flop"), rightNames);
-        assertEquals(ColumnSpans.asSpans(2,4,6,0), columnSpans);
-
-        assertNoMethodsRemoved();
-    }
-
-
-    public void testWithoutMemberGroups() {
-        facetFactory.process(new ProcessClassContext(ClassWithoutMemberGroupsAnnotation.class, methodRemover, facetHolder));
-
-        final Facet facet = facetHolder.getFacet(MemberGroupLayoutFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof MemberGroupLayoutFacetFallback);
-        final MemberGroupLayoutFacetFallback memberGroupsFacet = (MemberGroupLayoutFacetFallback) facet;
-        final List<String> groupNames = memberGroupsFacet.getLeft();
-        assertEquals(Arrays.asList("General"), groupNames);
-
-        assertNoMethodsRemoved();
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asColumnSpans.java b/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asColumnSpans.java
deleted file mode 100644
index ee2a2fa..0000000
--- a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asColumnSpans.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import java.util.Properties;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-public class MemberGroupLayoutFacetPropertiesTest_asColumnSpans {
-
-    private Properties properties;
-
-    @Before
-    public void setUp() throws Exception {
-        properties = new Properties();
-    }
-    
-    @Test
-    public void empty() throws Exception {
-        assertThat(MemberGroupLayoutFacetProperties.asColumnSpans(properties), is(nullValue()));
-    }
-    
-    @Test
-    public void other() throws Exception {
-        properties.put("foo", "a,b,c");
-        assertThat(MemberGroupLayoutFacetProperties.asColumnSpans(properties), is(nullValue()));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        properties.put("columnSpans", "2,3,0,7");
-        assertThat(MemberGroupLayoutFacetProperties.asColumnSpans(properties), is(ColumnSpans.asSpans(2,3,0,7)));
-    }
-    
-    @Test
-    public void trimmed() throws Exception {
-        properties.put("columnSpans", " 2,3,0,7 ");
-        assertThat(MemberGroupLayoutFacetProperties.asColumnSpans(properties), is(ColumnSpans.asSpans(2,3,0,7)));
-    }
-    
-    @Test
-    public void invalid() throws Exception {
-        properties.put("columnSpans", "x,x,x,x");
-        assertThat(MemberGroupLayoutFacetProperties.asColumnSpans(properties), is(nullValue()));
-    }
-
-}
diff --git a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asGroupList.java b/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asGroupList.java
deleted file mode 100644
index 2c5b367..0000000
--- a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetPropertiesTest_asGroupList.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.membergroups.annotprop;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetProperties;
-
-public class MemberGroupLayoutFacetPropertiesTest_asGroupList {
-
-    private Properties properties;
-
-    @Before
-    public void setUp() throws Exception {
-        properties = new Properties();
-    }
-    
-    @Test
-    public void empty() throws Exception {
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{}));
-    }
-    
-    @Test
-    public void other() throws Exception {
-        properties.put("foo", "a,b,c");
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{}));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        properties.put("left", "a,b,c");
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{"a","b","c"}));
-    }
-    
-    @Test
-    public void single() throws Exception {
-        properties.put("left", "a");
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{"a"}));
-    }
-
-    @Test
-    public void trimmed() throws Exception {
-        properties.put("left", " a, b ,c ");
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{"a","b","c"}));
-    }
-
-    @Test
-    public void filter() throws Exception {
-        properties.put("left", "a,,c");
-        assertThat(MemberGroupLayoutFacetProperties.asGroupList(properties, "left"), is(new String[]{"a","c"}));
-    }
-    
-}
diff --git a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAnnotationElseConfigurationFactoryTest.java b/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAnnotationElseConfigurationFactoryTest.java
deleted file mode 100644
index 28e0400..0000000
--- a/core/legacy/metamodel-legacy/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAnnotationElseConfigurationFactoryTest.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.parseable;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.annotation.Parseable;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
... 22738 lines suppressed ...