You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/09 11:52:40 UTC

[isis] branch master updated: ISIS-2856: metamodel: handle deprecations (first pass)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 753c1d5  ISIS-2856: metamodel: handle deprecations (first pass)
753c1d5 is described below

commit 753c1d506931dc4a6eea641aabe138c54c7cfa1d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jan 9 12:52:32 2022 +0100

    ISIS-2856: metamodel: handle deprecations (first pass)
    
    - removals and update of comments and java-doc
    - deprecate ParameterLayout#renderDay
    - deprecate PropertyLayout#renderDay
---
 .../modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc |  6 +++
 .../isis/applib/annotations/ParameterLayout.java   |  7 ++-
 .../isis/applib/annotations/PropertyLayout.java    |  2 +
 .../apache/isis/applib/annotations/RenderDay.java  |  2 +
 .../isis/applib/annotations/ValueSemantics.java    | 55 +++++++++++++++++-----
 .../layout/component/PropertyLayoutData.java       | 11 ++---
 ...ropertyLayoutData_renderedAsDayBefore_Test.java | 13 ++---
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |  1 -
 .../icon/method/IconFacetViaIconNameMethod.java    |  2 +-
 .../metamodel/facets/object/title/TitleFacet.java  |  8 ----
 .../DateRenderAdjustFacet.java}                    | 20 +++++---
 .../DateRenderAdjustFacetAbstract.java}            | 28 +++++------
 ...dAdjustedFacetForParameterLayoutAnnotation.java |  9 ++--
 ...edAdjustedFacetForPropertyLayoutAnnotation.java |  5 +-
 .../RenderedAdjustedFacetForPropertyXml.java       | 22 ++++-----
 ...nderedAsDayBeforeFacetAnnotationOnProperty.java | 37 ---------------
 ...derAdjustFacetFromValueSemanticsAnnotation.java | 45 ++++++++++++++++++
 .../ValueSemanticsAnnotationFacetFactory.java      |  3 ++
 .../core/metamodel/layout/LayoutFacetUtil.java     | 11 ++---
 .../isis/core/metamodel/spec/DefaultProvider.java  | 30 ------------
 .../isis/core/metamodel/spec/ManagedObjects.java   | 13 +++--
 .../core/metamodel/spec/ObjectSpecification.java   |  1 -
 .../spec/feature/ObjectActionParameter.java        | 15 ------
 .../specimpl/ObjectActionParameterAbstract.java    | 24 ----------
 .../specimpl/ObjectSpecificationAbstract.java      | 12 -----
 .../TitleAnnotationFacetFactoryTest.java           |  4 +-
 .../ident/title/TitleFacetViaMethodTest.java       | 42 ++++++-----------
 .../TitleFacetViaTitleAnnotationTest.java          |  6 +--
 .../object/ident/title/_TitleFacetUtil.java}       | 20 ++++----
 ...ionParameterAbstractTest_getId_and_getName.java | 14 ++----
 .../testspec/ObjectSpecificationStub.java          |  5 --
 .../DomainModelTest_usingGoodDomain.java           |  2 +-
 .../interaction/DomainObjectTesterFactory.java     |  5 +-
 .../domainobjects/DomainObjectLinkTo.java          | 12 +++--
 .../entity/icontitle/EntityIconAndTitlePanel.java  | 28 ++---------
 .../ScalarPanelTextFieldWithTemporalPicker.java    |  9 ++--
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java |  2 +-
 37 files changed, 220 insertions(+), 311 deletions(-)

diff --git a/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
index 596a751..1b04c12 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
@@ -24,6 +24,12 @@ from v1 to v2 using Spring's `@AliasFor` annotation.
 but it has come up as a requirement to ease migration for existing projects 
 from v1 to v2 using Spring's `@AliasFor` annotation 
 
+| `@ParameterLayout(renderDay=...)` deprecated for removal
+| use `@ValueSemantics(dateRenderAdjustDays=...)` instead
+
+| `@PropertyLayout(renderDay=...)` deprecated for removal
+| use `@ValueSemantics(dateRenderAdjustDays=...)` instead
+
 | We provided introspection control via global config option 
 `isis.core.meta-model.annotation.action.explicit=true/false`.
 | Use `@DomainObject(introspection=...)` instead ... 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotations/ParameterLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotations/ParameterLayout.java
index a1d2ef2..0922254 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotations/ParameterLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotations/ParameterLayout.java
@@ -139,10 +139,13 @@ public @interface ParameterLayout {
      * In the domain object, itself, however, the value stored is 1-jun-2013.
      * </p>
      *
+     * @deprecated instead use {@link ValueSemantics#dateRenderAdjustDays()}
      * @see PropertyLayout#renderDay()
      */
-    RenderDay renderDay()
-            default RenderDay.NOT_SPECIFIED;
+   @Deprecated(forRemoval = true, since = "2.0.0-M7")
+   RenderDay renderDay()
+           default RenderDay.NOT_SPECIFIED;
+
 
     /**
      * The typical entry length of a field, use to determine the optimum width for display
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotations/PropertyLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotations/PropertyLayout.java
index 73165bb..2d27953 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotations/PropertyLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotations/PropertyLayout.java
@@ -228,8 +228,10 @@ public @interface PropertyLayout {
      * In the domain object, itself, however, the value stored is 1-jun-2013.
      * </p>
      *
+     * @deprecated instead use {@link ValueSemantics#dateRenderAdjustDays()}
      * @see ParameterLayout#renderDay()
      */
+    @Deprecated(forRemoval = true, since = "2.0.0-M7")
     RenderDay renderDay()
             default RenderDay.NOT_SPECIFIED;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotations/RenderDay.java b/api/applib/src/main/java/org/apache/isis/applib/annotations/RenderDay.java
index 1182798..516f062 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotations/RenderDay.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotations/RenderDay.java
@@ -23,10 +23,12 @@ import javax.xml.bind.annotation.XmlType;
 /**
  * How to render days.
  * @since 1.x {@index}
+ * @deprecated
  */
 @XmlType(
         namespace = "http://isis.apache.org/applib/layout/component"
         )
+@Deprecated(forRemoval = true, since = "2.0.0-M7")
 public enum RenderDay {
 
     AS_DAY,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotations/ValueSemantics.java b/api/applib/src/main/java/org/apache/isis/applib/annotations/ValueSemantics.java
index dc1cbaa..f9a710a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotations/ValueSemantics.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotations/ValueSemantics.java
@@ -27,11 +27,11 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
  */
 @Inherited
 @Target({
-        ElementType.METHOD,
-        ElementType.FIELD,
-        ElementType.TYPE,
-        ElementType.PARAMETER,
-        ElementType.ANNOTATION_TYPE,
+    ElementType.METHOD,
+    ElementType.FIELD,
+    ElementType.TYPE,
+    ElementType.PARAMETER,
+    ElementType.ANNOTATION_TYPE,
 })
 @Retention(RetentionPolicy.RUNTIME)
 @Domain.Include // meta annotation, in support of meta-model validation
@@ -44,7 +44,7 @@ public @interface ValueSemantics {
      * targeted {@link ValueSemanticsProvider} bean
      */
     String provider()
-            default "";
+        default "";
 
     // -- NUMBER CONSTRAINTS
 
@@ -57,7 +57,7 @@ public @interface ValueSemantics {
      * @see Column#precision()
      */
     int maxTotalDigits()
-            default 65;
+        default 65;
 
     /**
      * If associated with a {@link Number}, the minimum number of integer digits required for
@@ -65,7 +65,7 @@ public @interface ValueSemantics {
      * default = {@code 1}
      */
     int minIntegerDigits()
-            default 1;
+        default 1;
 
     /**
      * If associated with a {@link BigDecimal}, the maximum number of fractional digits accepted
@@ -76,7 +76,7 @@ public @interface ValueSemantics {
      * @see Column#scale()
      */
     int maxFractionalDigits()
-            default 30;
+        default 30;
 
     /**
      * If associated with a {@link BigDecimal}, the minimum number of fractional digits
@@ -84,7 +84,7 @@ public @interface ValueSemantics {
      * default = {@code 0}
      */
     int minFractionalDigits()
-            default 0;
+        default 0;
 
     // -- TEMPORAL FORMATTING
 
@@ -93,14 +93,14 @@ public @interface ValueSemantics {
      * @see FormatStyle
      */
     FormatStyle dateFormatStyle()
-            default FormatStyle.MEDIUM;
+        default FormatStyle.MEDIUM;
 
     /**
      * If associated with a temporal time value, the rendering style of a localized time.
      * @see FormatStyle
      */
     FormatStyle timeFormatStyle()
-            default FormatStyle.MEDIUM;
+        default FormatStyle.MEDIUM;
 
     /**
      * If associated with a temporal time value, the time of day precision,
@@ -109,6 +109,35 @@ public @interface ValueSemantics {
      * @see TimePrecision
      */
     TimePrecision timePrecision()
-            default TimePrecision.SECOND;
+        default TimePrecision.SECOND;
 
+    /**
+     * If associated with a date or date-time value,
+     * instructs whether the date should be rendered as <i>n</i> days
+     * after the actually stored date.
+     * For negative <i>n</i> its days before respectively.
+     *
+     * <p>
+     * This is intended to be used so that an exclusive end date of an interval
+     * can be rendered as 1 day before the actual value stored.
+     * </p>
+     *
+     * <p>
+     * For example:
+     * </p>
+     * <pre>
+     * public LocalDate getStartDate() { ... }
+     *
+     * &#64;ValueSemantics(dateRenderAdjustDays = -1)
+     * public LocalDate getEndDate() { ... }
+     * </pre>
+     *
+     * <p>
+     * Here, the interval of the [1-may-2013,1-jun-2013) would be rendered as the dates
+     * 1-may-2013 for the start date but using 31-may-2013 (the day before) for the end date.  What is stored
+     * In the domain object, itself, however, the value stored is 1-jun-2013.
+     * </p>
+     */
+    int dateRenderAdjustDays()
+        default 0;
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 9dc65db..e80350b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -30,7 +30,6 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotations.LabelPosition;
 import org.apache.isis.applib.annotations.PromptStyle;
-import org.apache.isis.applib.annotations.RenderDay;
 import org.apache.isis.applib.annotations.Repainting;
 import org.apache.isis.applib.annotations.Where;
 import org.apache.isis.applib.layout.links.Link;
@@ -175,15 +174,15 @@ HasCssClass, HasDescribedAs, HasHidden, HasNamed  {
         this.promptStyle = promptStyle;
     }
 
-    private RenderDay renderDay;
+    private int dateRenderAdjustDays;
 
     @XmlAttribute(required = false)
-    public RenderDay getRenderDay() {
-        return renderDay;
+    public int getDateRenderAdjustDays() {
+        return dateRenderAdjustDays;
     }
 
-    public void setRenderDay(final RenderDay renderDay) {
-        this.renderDay = renderDay;
+    public void setDateRenderAdjustDays(final int dateRenderAdjustDays) {
+        this.dateRenderAdjustDays = dateRenderAdjustDays;
     }
 
 
diff --git a/api/applib/src/test/java/org/apache/isis/applib/layout/component/PropertyLayoutData_renderedAsDayBefore_Test.java b/api/applib/src/test/java/org/apache/isis/applib/layout/component/PropertyLayoutData_renderedAsDayBefore_Test.java
index e0cc914..ae3a1e4 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/layout/component/PropertyLayoutData_renderedAsDayBefore_Test.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/layout/component/PropertyLayoutData_renderedAsDayBefore_Test.java
@@ -20,11 +20,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import org.apache.isis.applib.annotations.RenderDay;
-
 public class PropertyLayoutData_renderedAsDayBefore_Test {
 
     PropertyLayoutData data;
@@ -32,27 +29,27 @@ public class PropertyLayoutData_renderedAsDayBefore_Test {
     public void setUp() throws Exception {
         data = new PropertyLayoutData();
 
-        assertThat(data.getRenderDay(), is(nullValue()));
+        assertThat(data.getDateRenderAdjustDays(), is(0));
     }
 
     @Test
     public void ignore_from_setRenderedAsDayBefore_once_set_to_DAY_BEFORE() throws Exception {
 
         // given
-        data.setRenderDay(RenderDay.AS_DAY_BEFORE);
+        data.setDateRenderAdjustDays(-1);
 
         // then (ignored)
-        assertThat(data.getRenderDay(), is(RenderDay.AS_DAY_BEFORE));
+        assertThat(data.getDateRenderAdjustDays(), is(-1));
     }
 
     @Test
     public void ignore_from_setRenderedAsDayBefore_once_set_to_DAY() throws Exception {
 
         // given
-        data.setRenderDay(RenderDay.AS_DAY);
+        data.setDateRenderAdjustDays(0);
 
         // then (ignored)
-        assertThat(data.getRenderDay(), is(RenderDay.AS_DAY));
+        assertThat(data.getDateRenderAdjustDays(), is(0));
     }
 
 }
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index c2f7d61..c0a56f2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -115,7 +115,6 @@ extends TitleFacetAbstract {
             }
         }
 
-
         final TranslatableString translatedTitle = titleUiEvent.getTranslatableTitle();
         if(translatedTitle != null) {
             return translatedTitle.translate(translationService, translationContext);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
index c4bd3a6..f8c3906 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
@@ -60,7 +60,7 @@ implements HasImperativeAspect {
 
     @Override
     public String iconName(final ManagedObject domainObject) {
-        return  imperativeAspect.eval(domainObject, (String)null);
+        return imperativeAspect.eval(domainObject, (String)null);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
index 5f84cf4..15c6014 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.facets.object.title;
 
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 /**
  * Mechanism for obtaining the title of an instance of a class, used to label
@@ -39,11 +38,4 @@ public interface TitleFacet extends Facet {
      */
     String title(TitleRenderRequest titleRenderRequest);
 
-    @Deprecated
-    default String title(final ManagedObject targetAdapter) {
-        return title(TitleRenderRequest.builder()
-                .object(targetAdapter)
-                .build());
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacet.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacet.java
index cf2a6fb..59f3073 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacet.java
@@ -16,23 +16,29 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted;
+package org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust;
 
-import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
+import org.apache.isis.applib.annotations.ValueSemantics;
+import org.apache.isis.core.metamodel.facetapi.Facet;
 
 /**
- * The amount to adjust a date by when rendered.
+ * The amount of days to adjust a date by when rendered.
  *
  * <p>
  * Intended to be used by the viewer as a rendering hint.
  *
  * <p>
  * In the standard Apache Isis Programming Model, corresponds to the
- * <tt>@RenderedAdjusted</tt> annotation.
+ * {@link ValueSemantics#dateRenderAdjustDays()} annotation.
+ *
+ * @since 2.0 - replacing RenderedAdjustedFacet from 1.x and 2.0.0-M6
+ *
  */
-public interface RenderedAdjustedFacet extends SingleIntValueFacet {
+public interface DateRenderAdjustFacet extends Facet {
 
-    @Override
-    public int value();
+    /**
+     * The amount of days to adjust a date by when rendered.
+     */
+    int getDateRenderAdjustDays();
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacetAbstract.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacetAbstract.java
index 6ae24e0..a731983 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/renderedadjusted/RenderedAdjustedFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/daterenderedadjust/DateRenderAdjustFacetAbstract.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted;
+package org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust;
 
 import java.util.function.BiConsumer;
 
@@ -26,38 +26,36 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 import lombok.NonNull;
 
-public abstract class RenderedAdjustedFacetAbstract
+public abstract class DateRenderAdjustFacetAbstract
 extends FacetAbstract
-implements RenderedAdjustedFacet {
+implements DateRenderAdjustFacet {
 
-    public static final Class<RenderedAdjustedFacet> type() {
-        return RenderedAdjustedFacet.class;
+    public static final Class<DateRenderAdjustFacet> type() {
+        return DateRenderAdjustFacet.class;
     }
 
-    private final int adjustBy;
+    private final int dateRenderAdjustDays;
 
-    public RenderedAdjustedFacetAbstract(final int adjustBy, final FacetHolder holder) {
+    protected DateRenderAdjustFacetAbstract(final int adjustByDays, final FacetHolder holder) {
         super(type(), holder);
-        this.adjustBy = adjustBy;
+        this.dateRenderAdjustDays = adjustByDays;
     }
 
     @Override
-    public int value() {
-        return adjustBy;
+    public int getDateRenderAdjustDays() {
+        return dateRenderAdjustDays;
     }
 
     @Override
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
         super.visitAttributes(visitor);
-        visitor.accept("adjustBy", adjustBy == -1
-                ? "default"
-                : String.valueOf(adjustBy));
+        visitor.accept("dateRenderAdjustDays", String.valueOf(dateRenderAdjustDays));
     }
 
     @Override
     public boolean semanticEquals(final @NonNull Facet other) {
-        return other instanceof RenderedAdjustedFacet
-                ? this.value() == ((RenderedAdjustedFacet)other).value()
+        return other instanceof DateRenderAdjustFacet
+                ? this.getDateRenderAdjustDays() == ((DateRenderAdjustFacet)other).getDateRenderAdjustDays()
                 : false;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
index 8e4232c..ec7185a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
@@ -23,13 +23,14 @@ import java.util.Optional;
 import org.apache.isis.applib.annotations.ParameterLayout;
 import org.apache.isis.applib.annotations.RenderDay;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract;
 
+@Deprecated(forRemoval = true, since = "2.0.0-M7")
 public class RenderedAdjustedFacetForParameterLayoutAnnotation
-extends RenderedAdjustedFacetAbstract {
+extends DateRenderAdjustFacetAbstract {
 
-    public static Optional<RenderedAdjustedFacet> create(
+    public static Optional<DateRenderAdjustFacet> create(
             final Optional<ParameterLayout> parameterLayoutIfAny,
             final FacetHolder holder) {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
index b1fa4f3..184eeec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
@@ -23,10 +23,11 @@ import java.util.Optional;
 import org.apache.isis.applib.annotations.PropertyLayout;
 import org.apache.isis.applib.annotations.RenderDay;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract;
 
+@Deprecated(forRemoval = true, since = "2.0.0-M7")
 public class RenderedAdjustedFacetForPropertyLayoutAnnotation
-extends RenderedAdjustedFacetAbstract {
+extends DateRenderAdjustFacetAbstract {
 
     public static Optional<RenderedAdjustedFacetForPropertyLayoutAnnotation> create(
             final Optional<PropertyLayout> propertyLayoutIfAny,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java
index 13bd45b..8749cb0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java
@@ -20,32 +20,28 @@ package org.apache.isis.core.metamodel.facets.properties.propertylayout;
 
 import java.util.Optional;
 
-import org.apache.isis.applib.annotations.RenderDay;
 import org.apache.isis.applib.layout.component.PropertyLayoutData;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract;
 
 public class RenderedAdjustedFacetForPropertyXml
-extends RenderedAdjustedFacetAbstract {
+extends DateRenderAdjustFacetAbstract {
 
-    public static Optional<RenderedAdjustedFacet> create(
+    public static Optional<DateRenderAdjustFacet> create(
             final PropertyLayoutData propertyLayout,
             final FacetHolder holder) {
         if(propertyLayout == null) {
             return Optional.empty();
         }
-        final RenderDay renderDay = propertyLayout.getRenderDay();
-        return renderDay != null
-                && renderDay == RenderDay.AS_DAY_BEFORE
-                        ? Optional.of(new RenderedAdjustedFacetForPropertyXml(holder))
+        final int adjustByDays = propertyLayout.getDateRenderAdjustDays();
+        return adjustByDays != 0
+                        ? Optional.of(new RenderedAdjustedFacetForPropertyXml(adjustByDays, holder))
                         : Optional.empty();
     }
 
-    public static final int ADJUST_BY = -1;
-
-    private RenderedAdjustedFacetForPropertyXml(final FacetHolder holder) {
-        super(ADJUST_BY, holder);
+    private RenderedAdjustedFacetForPropertyXml(final int adjustByDays, final FacetHolder holder) {
+        super(adjustByDays, holder);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeFacetAnnotationOnProperty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeFacetAnnotationOnProperty.java
deleted file mode 100644
index 3f6f926..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeFacetAnnotationOnProperty.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.core.metamodel.facets.properties.renderedasdaybefore.annotation;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacetAbstract;
-
-/**
- * @deprecated
- */
-@Deprecated
-public class RenderedAsDayBeforeFacetAnnotationOnProperty extends RenderedAdjustedFacetAbstract {
-
-    private static final int ADJUST_BY = -1;
-
-    public RenderedAsDayBeforeFacetAnnotationOnProperty(final FacetHolder holder) {
-        super(ADJUST_BY, holder);
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateRenderAdjustFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateRenderAdjustFacetFromValueSemanticsAnnotation.java
new file mode 100644
index 0000000..6e96afa
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateRenderAdjustFacetFromValueSemanticsAnnotation.java
@@ -0,0 +1,45 @@
+/*
+ *  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.semantics;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.annotations.ValueSemantics;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract;
+
+public class DateRenderAdjustFacetFromValueSemanticsAnnotation
+extends DateRenderAdjustFacetAbstract {
+
+    public static Optional<DateRenderAdjustFacet> create(
+            final Optional<ValueSemantics> valueSemanticsIfAny,
+            final FacetHolder holder) {
+
+        return valueSemanticsIfAny
+        .map(ValueSemantics::dateRenderAdjustDays)
+        .filter(adjustBy -> adjustBy != 0)
+        .map(adjustBy -> new DateRenderAdjustFacetFromValueSemanticsAnnotation(adjustBy, holder));
+    }
+
+    private DateRenderAdjustFacetFromValueSemanticsAnnotation(final int adjustBy, final FacetHolder holder) {
+        super(adjustBy, holder);
+    }
+
+}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index a2560bc..fabf4c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -140,6 +140,9 @@ extends FacetFactoryAbstract {
                 TimeFormatPrecisionFacetFromValueSemanticsAnnotation
                 .create(valueSemanticsIfAny, facetHolder));
 
+        addFacetIfPresent(
+                DateRenderAdjustFacetFromValueSemanticsAnnotation
+                .create(valueSemanticsIfAny, facetHolder));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
index 039a4d7..da284ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
@@ -23,7 +23,6 @@ import java.util.Comparator;
 import org.apache.isis.applib.annotations.ActionLayout;
 import org.apache.isis.applib.annotations.BookmarkPolicy;
 import org.apache.isis.applib.annotations.LabelPosition;
-import org.apache.isis.applib.annotations.RenderDay;
 import org.apache.isis.applib.annotations.Where;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -53,9 +52,9 @@ import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -270,11 +269,9 @@ public class LayoutFacetUtil {
             final PropertyLayoutData propertyLayoutData,
             final FacetHolder facetHolder) {
 
-        val renderedAdjustedFacet = facetHolder.getFacet(RenderedAdjustedFacet.class);
-        if(isDoOp(renderedAdjustedFacet)) {
-            final int adjusted = renderedAdjustedFacet.value();
-            propertyLayoutData.setRenderDay(adjusted != 0 ? RenderDay.AS_DAY_BEFORE : RenderDay.AS_DAY);
-        }
+        facetHolder.lookupNonFallbackFacet(DateRenderAdjustFacet.class)
+        .ifPresent(dateRenderAdjustFacet->
+            propertyLayoutData.setDateRenderAdjustDays(dateRenderAdjustFacet.getDateRenderAdjustDays()));
     }
 
     public void setSortedByIfAny(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/DefaultProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/DefaultProvider.java
deleted file mode 100644
index 1244a98..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/DefaultProvider.java
+++ /dev/null
@@ -1,30 +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;
-
-public interface DefaultProvider {
-
-    /**
-     * Default value to be provided for properties or parameters that are not
-     * declared as <tt>@Optional</tt> but where the UI has not (yet) provided a
-     * value.
-     */
-    Object getDefaultValue();
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index c9e2b75..5e8c547 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -495,13 +495,12 @@ public final class ManagedObjects {
                 return "unspecified object";
             }
 
-            if (managedObject.getSpecification().isNonScalar()) {
-                val collectionFacet = managedObject.getSpecification().getFacet(CollectionFacet.class);
-                return collectionTitleString(managedObject, collectionFacet);
-            } else {
-                return objectTitleString(titleRenderRequest)
-                        .trim();
-            }
+            return managedObject.getSpecification().isNonScalar()
+                ? collectionTitleString(
+                        managedObject,
+                        managedObject.getSpecification().getFacet(CollectionFacet.class))
+                : objectTitleString(titleRenderRequest)
+                    .trim();
         }
 
         // -- HELPER
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 9ba3c8c..5bbac30 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -95,7 +95,6 @@ extends
     ObjectActionContainer,
     ObjectAssociationContainer,
     Hierarchical,
-    DefaultProvider,
     HasLogicalType {
 
     final class Comparators{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index 948d93b..8566935 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -174,21 +174,6 @@ extends ObjectFeature, CurrentHolder {
             Can<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 
-    /**
-     * Whether proposed value for this parameter is valid.
-     *
-     * @param adapter
-     * @param proposedValue
-     * @param interactionInitiatedBy
-     * @deprecated use variant with all pendingArgs instead
-     */
-    @Deprecated
-    String isValid(
-            InteractionHead head,
-            ManagedObject proposedValue,
-            InteractionInitiatedBy interactionInitiatedBy);
-
-
     @Vetoed
     public static class Predicates {
         private Predicates(){}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index e829fc8..e53971e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.metamodel.commons.ClassExtensions;
 import org.apache.isis.core.metamodel.consent.Allow;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResultSet;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -379,29 +378,6 @@ implements
         return validResult.createConsent();
     }
 
-    @Override @Deprecated
-    public String isValid(
-            final InteractionHead head,
-            final ManagedObject proposedValue,
-            final InteractionInitiatedBy interactionInitiatedBy) {
-
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(proposedValue)) {
-            return null;
-        }
-
-        val argumentAdapters = arguments(proposedValue);
-        val validityContext = createProposedArgumentInteractionContext(
-                head, argumentAdapters, getParameterIndex(), interactionInitiatedBy);
-
-        final InteractionResultSet buf = new InteractionResultSet();
-        InteractionUtils.isValidResultSet(this, validityContext, buf);
-        if (buf.isVetoed()) {
-            return buf.getInteractionResult().getReason();
-        }
-        return null;
-
-    }
-
     /**
      * TODO: this is not ideal, because we can only populate the array for
      * single argument, rather than the entire argument set. Instead, we ought
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index a0d73f4..81c7564 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -575,18 +575,6 @@ implements ObjectSpecification {
         }
     }
 
-
-    // -- DefaultValue - unused
-    /**
-     * @deprecated  - never called.
-     * @return - always returns <tt>null</tt>
-     */
-    @Deprecated
-    @Override
-    public Object getDefaultValue() {
-        return null;
-    }
-
     @Override
     public ObjectTitleContext createTitleInteractionContext(
             final ManagedObject targetObjectAdapter,
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
similarity index 99%
rename from core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
index 7b19d95..188edc3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.object.ident.title.annotation;
+package org.apache.isis.core.metamodel.facets.object.ident.title;
 
 import java.lang.reflect.Method;
 import java.util.Arrays;
@@ -166,7 +166,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
             ignoring(mockStringSpec).assertPojoCompatible(with(any(String.class)));
 
         }});
-        final String title = titleFacetViaTitleAnnotation.title(mockObjectAdapter);
+        final String title = _TitleFacetUtil.title(titleFacetViaTitleAnnotation, mockObjectAdapter);
         assertThat(title, is("titleElement1. titleElement3,titleElement2"));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java
index ccd30b6..17896d4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java
@@ -21,35 +21,27 @@ package org.apache.isis.core.metamodel.facets.object.ident.title;
 import java.lang.reflect.Method;
 
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.junit.After;
+import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-@RunWith(JMock.class)
-public class TitleFacetViaMethodTest {
-
-    private final Mockery mockery = new JUnit4Mockery();
+public class TitleFacetViaMethodTest
+extends AbstractFacetFactoryJUnit4TestCase {
 
     private TitleFacetViaTitleMethod facet;
-    private FacetHolder mockFacetHolder;
 
-    private ManagedObject mockOwningAdapter;
+    @Mock private ManagedObject mockOwningAdapter;
 
     private DomainObjectWithProblemInItsTitleMethod pojo;
-
     private MetaModelContext metaModelContext;
 
     public static class DomainObjectWithProblemInItsTitleMethod {
@@ -65,34 +57,28 @@ public class TitleFacetViaMethodTest {
                 .build();
 
         pojo = new DomainObjectWithProblemInItsTitleMethod();
-        mockFacetHolder = mockery.mock(FacetHolder.class);
-        mockOwningAdapter = mockery.mock(ManagedObject.class);
+        //mockFacetHolder = mockery.mock(FacetHolder.class);
+        //mockOwningAdapter = mockery.mock(ManagedObject.class);
         final Method iconNameMethod = DomainObjectWithProblemInItsTitleMethod.class.getMethod("title");
         facet = (TitleFacetViaTitleMethod) TitleFacetViaTitleMethod
                 .create(iconNameMethod, mockFacetHolder)
                 .orElse(null);
 
 
-        mockery.checking(new Expectations() {
-            {
+        context.checking(new Expectations() {{
 
-                allowing(mockFacetHolder).getMetaModelContext();
-                will(returnValue(metaModelContext));
+            allowing(mockFacetHolder).getMetaModelContext();
+            will(returnValue(metaModelContext));
 
-                allowing(mockOwningAdapter).getPojo();
-                will(returnValue(pojo));
-            }
-        });
-    }
+            allowing(mockOwningAdapter).getPojo();
+            will(returnValue(pojo));
 
-    @After
-    public void tearDown() throws Exception {
-        facet = null;
+        }});
     }
 
     @Test
     public void testTitleThrowsException() {
-        final String title = facet.title(mockOwningAdapter);
+        final String title = _TitleFacetUtil.title(facet, mockOwningAdapter);
         assertThat(title, is("Failed Title"));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java
similarity index 96%
rename from core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java
index 487d93d..c1384fd 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.object.ident.title.annotation;
+package org.apache.isis.core.metamodel.facets.object.ident.title;
 
 import org.jmock.Expectations;
 import org.jmock.Sequence;
@@ -115,7 +115,7 @@ public class TitleFacetViaTitleAnnotationTest {
             }
         });
 
-        final String title = facet.title(mockManagedObject);
+        final String title = _TitleFacetUtil.title(facet, mockManagedObject);
         assertThat(title, is("Normal Domain Object"));
     }
 
@@ -140,7 +140,7 @@ public class TitleFacetViaTitleAnnotationTest {
             }
         });
 
-        final String title = facet.title(mockManagedObject);
+        final String title = _TitleFacetUtil.title(facet, mockManagedObject);
         assertThat(title, is("Failed Title"));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/annotation/PagedFacetForPagedAnnotationOnType.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/_TitleFacetUtil.java
similarity index 61%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/annotation/PagedFacetForPagedAnnotationOnType.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/_TitleFacetUtil.java
index 2b46f40..efd4a30 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/annotation/PagedFacetForPagedAnnotationOnType.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/_TitleFacetUtil.java
@@ -16,18 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.object.paged.annotation;
+package org.apache.isis.core.metamodel.facets.object.ident.title;
 
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-/**
- * @deprecated
- */
-@Deprecated
-public class PagedFacetForPagedAnnotationOnType extends PagedFacetAbstract {
+final class _TitleFacetUtil {
 
-    public PagedFacetForPagedAnnotationOnType(FacetHolder holder, int value) {
-        super(value, holder);
+    static String title(final TitleFacet titleFacet, final ManagedObject targetAdapter) {
+        return titleFacet.title(TitleRenderRequest.builder()
+                .object(targetAdapter)
+                .build());
     }
+
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index 9053818..bc9d095 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -27,6 +27,9 @@ import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
@@ -42,9 +45,6 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
 
 public class ObjectActionParameterAbstractTest_getId_and_getName {
 
@@ -82,14 +82,6 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
         }
 
         @Override
-        public String isValid(
-                final InteractionHead head,
-                final ManagedObject proposedValue,
-                final InteractionInitiatedBy interactionInitiatedBy) {
-            return null;
-        }
-
-        @Override
         public Consent isValid(final InteractionHead head, final Can<ManagedObject> pendingArgs,
                 final InteractionInitiatedBy interactionInitiatedBy) {
             return null;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index c36d6ad..e4bf97c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -260,11 +260,6 @@ implements ObjectSpecification {
     }
 
     @Override
-    public Object getDefaultValue() {
-        return null;
-    }
-
-    @Override
     public Identifier getFeatureIdentifier() {
         return Identifier.classIdentifier(LogicalType.fqcn(correspondingClass));
     }
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index 4a830ff..e2f403f 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -238,7 +238,7 @@ class DomainModelTest_usingGoodDomain {
             assertEquals("inherited icon", titleService.iconNameOf(instance));
 
             val domainObject = ManagedObject.of(spec, instance);
-            assertEquals("inherited title", titleFacet.title(domainObject));
+            assertEquals("inherited title", domainObject.titleString());
             assertEquals("inherited icon", iconFacet.iconName(domainObject));
         }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
index 35673af..615b7bf 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -55,7 +55,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
-import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
 import org.apache.isis.core.metamodel.interactions.managed.CollectionInteraction;
@@ -172,9 +171,7 @@ public class DomainObjectTesterFactory {
             assertEquals(expectedResult,
                     super.objectSpecification.getTitleService().titleOf(vm.getPojo()));
             assertEquals(expectedResult,
-                    super.objectSpecification.lookupFacet(TitleFacet.class)
-                    .map(titleFacet->titleFacet.title(vm))
-                    .orElse(null));
+                    vm.titleString());
         }
 
         public void assertIcon(final @Nullable String expectedResult) {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
index 17e6378..6dff64d 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
@@ -50,7 +50,12 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
 
     @Override
     public LinkBuilder builder(final Rel rel) {
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, relElseDefault(rel).getName(), RepresentationType.DOMAIN_OBJECT, linkRef(new StringBuilder()).toString());
+        final LinkBuilder linkBuilder = LinkBuilder
+                .newBuilder(
+                        resourceContext,
+                        relElseDefault(rel).getName(),
+                        RepresentationType.DOMAIN_OBJECT,
+                        linkRef(new StringBuilder()).toString());
         linkBuilder.withTitle(objectAdapter.titleString());
         return linkBuilder;
     }
@@ -58,7 +63,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
     /**
      * hook method
      */
-    protected StringBuilder linkRef(StringBuilder buf) {
+    protected StringBuilder linkRef(final StringBuilder buf) {
         String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
         return buf.append("objects/").append(objectRef);
     }
@@ -93,7 +98,4 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
         return LinkBuilder.newBuilder(resourceContext, rel.andParam(memberType.getName(), objectMember.getId()), representationType, url);
     }
 
-
-
-
 }
\ No newline at end of file
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 66468b1..5d639dd 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -23,11 +23,9 @@ import java.util.Optional;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.resource.ResourceReference;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactory;
@@ -60,11 +58,6 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
     private static final String ID_ENTITY_TITLE = "entityTitle";
     private static final String ID_ENTITY_ICON = "entityImage";
 
-    @SuppressWarnings("unused")
-    private Label label;
-    @SuppressWarnings("unused")
-    private Image image;
-
     public EntityIconAndTitlePanel(
             final String id,
             final ObjectAdapterModel objectAdapterModel) {
@@ -124,7 +117,8 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
             final String iconName = spec.getIconName(adapterIfAny);
             final CssClassFaFactory cssClassFaFactory = spec.getCssClassFaFactory().orElse(null);
             if (iconName != null || cssClassFaFactory == null) {
-                link.addOrReplace(this.image = newImage(ID_ENTITY_ICON, adapterIfAny));
+                Wkt.imageAddCachable(link, ID_ENTITY_ICON,
+                                getImageResourceCache().resourceReferenceFor(adapterIfAny));
                 Components.permanentlyHide(link, ID_ENTITY_FONT_AWESOME);
             } else {
                 Label dummy = Wkt.labelAdd(link, ID_ENTITY_FONT_AWESOME, "");
@@ -133,7 +127,7 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
             }
 
             final String title = determineTitle();
-            this.label = Wkt.labelAdd(link, ID_ENTITY_TITLE, titleAbbreviated(title));
+            Wkt.labelAdd(link, ID_ENTITY_TITLE, titleAbbreviated(title));
 
             String entityTypeName = determineFriendlyType() // from actual underlying model
                     .orElseGet(adapterIfAny.getSpecification()::getSingularName); // not sure if this code path is ever reached
@@ -212,22 +206,8 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
         return titleString.length();
     }
 
-    protected Image newImage(final String id, final ManagedObject adapter) {
-        final ResourceReference imageResource = getImageResourceCache().resourceReferenceFor(adapter);
-
-        final Image image = new Image(id, imageResource) {
-            private static final long serialVersionUID = 1L;
-            @Override
-            protected boolean shouldAddAntiCacheParameter() {
-                return false;
-            }
-        };
-        return image;
-    }
-
     private boolean isContextAdapter(final ManagedObject other) {
-        final ObjectAdapterModel model = getModel();
-        return model.isContextAdapter(other);
+        return getModel().isContextAdapter(other);
     }
 
     static String abbreviated(final String str, final int maxLength) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
index dea019d..beab2af 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
@@ -23,7 +23,7 @@ import java.io.Serializable;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
 
@@ -40,9 +40,10 @@ extends ScalarPanelTextFieldWithValueSemantics<T>  {
         super(id, scalarModel, cls);
     }
 
-    protected int getAdjustBy() {
-        final RenderedAdjustedFacet facet = getModel().getFacet(RenderedAdjustedFacet.class);
-        return facet != null? facet.value(): 0;
+    protected int getDateRenderAdjustDays() {
+        return getModel().lookupFacet(DateRenderAdjustFacet.class)
+            .map(DateRenderAdjustFacet::getDateRenderAdjustDays)
+            .orElse(0);
     }
 
     @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index ad0db79..af271a5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -330,7 +330,7 @@ public class Wkt {
 
     // -- IMAGE
 
-    private Image imageCachable(final String id, final ResourceReference imageResource) {
+    public Image imageCachable(final String id, final ResourceReference imageResource) {
         return new Image(id, imageResource) {
             private static final long serialVersionUID = 1L;
             @Override protected boolean shouldAddAntiCacheParameter() { return false; }