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 e79b979e43 ISIS-3109: polishes zoned/offset temporal badge rendering
e79b979e43 is described below
commit e79b979e436cf60e049a300a5bb131f723ccb636
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 4 12:08:21 2022 +0200
ISIS-3109: polishes zoned/offset temporal badge rendering
---
.../isis/commons/internal/base/_Temporals.java | 33 +++++++++++++
.../temporal/TemporalValueSemanticsProvider.java | 55 +++++++++++++++-------
.../bootstrap/css/bootstrap-overrides-all-v2.css | 4 +-
3 files changed, 75 insertions(+), 17 deletions(-)
diff --git
a/commons/src/main/java/org/apache/isis/commons/internal/base/_Temporals.java
b/commons/src/main/java/org/apache/isis/commons/internal/base/_Temporals.java
index cc01da783b..292d001436 100644
---
a/commons/src/main/java/org/apache/isis/commons/internal/base/_Temporals.java
+++
b/commons/src/main/java/org/apache/isis/commons/internal/base/_Temporals.java
@@ -32,6 +32,7 @@ import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.Temporal;
import java.util.Locale;
import java.util.Optional;
import java.util.regex.Pattern;
@@ -90,6 +91,38 @@ public final class _Temporals {
: Optional.empty();
}
+ // -- ZONE TRANSLATION
+
+ /**
+ * Translates given {@link Temporal} into provided {@link ZoneId}
preserving the time instant.
+ * If timeZone is absent, acts as a identity operator.
+ * @param temporal - the {@link Temporal} to translate (required)
+ * @param zoneId - target {@link ZoneId} (required)
+ */
+ public ZonedDateTime translateToTimeZone(final @NonNull ZonedDateTime
temporal, final @NonNull ZoneId zoneId) {
+ return temporal.withZoneSameInstant(zoneId);
+ }
+
+ /**
+ * Translates given {@link Temporal} into provided {@link ZoneId}
preserving the time instant.
+ * If timeZone is absent, acts as a identity operator.
+ * @param temporal - the {@link Temporal} to translate (required)
+ * @param zoneId - target {@link ZoneId} (required)
+ */
+ public ZonedDateTime translateToTimeZone(final @NonNull OffsetDateTime
temporal, final @NonNull ZoneId zoneId) {
+ return ZonedDateTime.ofInstant(temporal.toInstant(), zoneId);
+ }
+
+ /**
+ * Translates given {@link Temporal} into provided {@link ZoneId}
preserving the time instant.
+ * If timeZone is absent, acts as a identity operator.
+ * @param temporal - the {@link Temporal} to translate (required)
+ * @param offset - target {@link ZoneOffset} (required)
+ */
+ public OffsetTime translateToTimeOffset(final @NonNull OffsetTime
temporal, final @NonNull ZoneOffset offset) {
+ return temporal.withOffsetSameInstant(offset);
+ }
+
// -- TIME ZONE RENDERING
public final DateTimeFormatter ISO_OFFSET_ONLY_FORMAT = new
DateTimeFormatterBuilder()
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
index 13b416698c..23835b8bac 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
@@ -20,7 +20,6 @@ package
org.apache.isis.core.metamodel.valuesemantics.temporal;
import java.time.Duration;
import java.time.Instant;
-import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZonedDateTime;
@@ -47,6 +46,7 @@ import
org.apache.isis.applib.value.semantics.ValueDecomposition;
import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.base._Temporals;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import
org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacet;
@@ -217,7 +217,7 @@ implements TemporalValueSemantics<T> {
final var timeZoneTranslation =
dateAndTimeFormatStyle.getTimeZoneTranslation();
- final var asLocalTime = toLocalTime(context, time);
+ final var asLocalicedTime =
translateToUserLocalTimeZone(context, time);
final var sb = new StringBuffer();
@@ -228,14 +228,15 @@ implements TemporalValueSemantics<T> {
sb.append(temporalNoZoneRenderingFormat.format(time));
} else {
// start rendering with the (to-local) translated time
(no offset/zone info)
-
sb.append(temporalNoZoneRenderingFormat.format(asLocalTime));
+
sb.append(temporalNoZoneRenderingFormat.format(asLocalicedTime));
// we have offset/zone information, so we append it
(properly formatted) ...
sb.append(' ');
sb.append(badgeRenderer.render(
- "", // no text
- ()->"fa-solid fa-user-clock",
+ // translated local time-zone
+
temporalZoneOnlyRenderingFormat.format(asLocalicedTime),
+ ()->"fa-solid fa-user-clock fontAwesomeIcon",
()->translate("Instant")
+ ": "
+
temporalNoZoneRenderingFormat.format(time)
@@ -255,10 +256,10 @@ implements TemporalValueSemantics<T> {
sb.append(badgeRenderer.render(
temporalZoneOnlyRenderingFormat.format(time),
- ()->"fa-solid fa-globe",
+ ()->"fa-solid fa-globe fontAwesomeIcon",
()->translate("your local time")
+ ": "
- +
temporalNoZoneRenderingFormat.format(asLocalTime)));
+ +
temporalNoZoneRenderingFormat.format(asLocalicedTime)));
}
break;
}
@@ -267,30 +268,52 @@ implements TemporalValueSemantics<T> {
};
}
+// /**
+// * Converts given {@link Temporal} when offset,
+// * to a temporal that is local to the user's (client's) time-zone.
+// * In other words, this conversion preserves the time {@link Instant}.
+// */
+// private Temporal toLocalTime(final ValueSemanticsProvider.Context
context, final Temporal t) {
+// if(t instanceof ZonedDateTime) {
+// return LocalDateTime.ofInstant(((ZonedDateTime) t).toInstant(),
+// context.getInteractionContext().getTimeZone());
+// }
+// if(t instanceof OffsetDateTime) {
+// return LocalDateTime.ofInstant(((OffsetDateTime) t).toInstant(),
+// context.getInteractionContext().getTimeZone());
+// }
+// if(t instanceof OffsetTime) {
+// return ((OffsetTime) t)
+// // convert to 'user time'
+//
.withOffsetSameInstant(context.getInteractionContext().getTimeZoneOffsetNow())
+// // remove offset information
+// .toLocalTime();
+// }
+// return t;
+// }
+
/**
* Converts given {@link Temporal} when offset,
* to a temporal that is local to the user's (client's) time-zone.
* In other words, this conversion preserves the time {@link Instant}.
*/
- private Temporal toLocalTime(final ValueSemanticsProvider.Context context,
final Temporal t) {
+ private Temporal translateToUserLocalTimeZone(final
ValueSemanticsProvider.Context context, final Temporal t) {
if(t instanceof ZonedDateTime) {
- return LocalDateTime.ofInstant(((ZonedDateTime) t).toInstant(),
+ return _Temporals.translateToTimeZone((ZonedDateTime) t,
context.getInteractionContext().getTimeZone());
}
if(t instanceof OffsetDateTime) {
- return LocalDateTime.ofInstant(((OffsetDateTime) t).toInstant(),
+ return _Temporals.translateToTimeZone((OffsetDateTime) t,
context.getInteractionContext().getTimeZone());
}
if(t instanceof OffsetTime) {
- return ((OffsetTime) t)
- // convert to 'user time'
-
.withOffsetSameInstant(context.getInteractionContext().getTimeZoneOffsetNow())
- // remove offset information
- .toLocalTime();
+ return _Temporals.translateToTimeOffset((OffsetTime) t,
+ context.getInteractionContext().getTimeZoneOffsetNow());
}
- return t;
+ return t; // otherwise acts as identity operator
}
+
/**
* Format used for rendering editable text representation.
*/
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
index de3fb3caa0..4a239f007d 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
@@ -149,7 +149,9 @@ footer > .navbar {
margin: 0;
}
-
+.fontAwesomeIcon {
+ margin-right: 4px;
+}
/* from ActionPromptHeaderPanel */