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 cb8ecc943d ISIS-3002: refactors _BigDecimals util into _Times util
cb8ecc943d is described below

commit cb8ecc943da8b876190cfdd51cd4600cae7db886
Author: andi-huber <[email protected]>
AuthorDate: Tue Jul 26 07:42:57 2022 +0200

    ISIS-3002: refactors _BigDecimals util into _Times util
---
 .../base/{_BigDecimals.java => _Times.java}        | 40 ++++++++++------------
 .../appfeat/ApplicationFeatureDefault.java         |  1 -
 .../ApplicationFeatureRepositoryDefault.java       |  9 +++--
 .../commandlog/applib/dom/CommandLogEntry.java     |  8 +++--
 .../executionlog/applib/dom/ExecutionLogEntry.java | 12 ++++---
 .../applib/dom/ExecutionOutboxEntry.java           | 12 ++++---
 6 files changed, 42 insertions(+), 40 deletions(-)

diff --git 
a/commons/src/main/java/org/apache/isis/commons/internal/base/_BigDecimals.java 
b/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
similarity index 61%
rename from 
commons/src/main/java/org/apache/isis/commons/internal/base/_BigDecimals.java
rename to 
commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
index 856b1874f6..f0f4f6038d 100644
--- 
a/commons/src/main/java/org/apache/isis/commons/internal/base/_BigDecimals.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
@@ -18,23 +18,19 @@
  */
 package org.apache.isis.commons.internal.base;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.sql.Timestamp;
-import java.util.Base64;
-import java.util.function.UnaryOperator;
+import java.util.Optional;
 
 import org.springframework.lang.Nullable;
 
-import lombok.NonNull;
+import lombok.experimental.UtilityClass;
 
 /**
  * <h1>- internal use only -</h1>
  * <p>
- * Provides BigDecimal related functions.
+ * Provides time related functions.
  * </p>
  * <p>
  * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this 
package! <br/>
@@ -43,27 +39,29 @@ import lombok.NonNull;
  *
  * @since 2.0
  */
-public final class _BigDecimals {
-
-    private _BigDecimals(){}
+@UtilityClass
+public final class _Times {
 
     /**
-     * @return in seconds, to 3 decimal places.
+     * Returns duration between {@code startedAt} and {@code completedAt} in 
<i>seconds</i>,
+     * to 3 decimal places.
+     * @implNote if {@code completedAt} is before {@code startedAt},
+     * a negative value is returned.
      */
-    public static BigDecimal durationBetween(Timestamp startedAt, Timestamp 
completedAt) {
-        if (completedAt == null) {
-            return null;
-        } else {
-            long millis = completedAt.getTime() - startedAt.getTime();
-            return toSeconds(millis);
-        }
+    public Optional<BigDecimal> secondsBetweenAsDecimal(
+            final @Nullable Timestamp startedAt,
+            final @Nullable Timestamp completedAt) {
+        return startedAt!=null
+                && completedAt!=null
+                        ? Optional.of(millisToSeconds(completedAt.getTime() - 
startedAt.getTime()))
+                        : Optional.empty();
     }
 
-    private static final BigDecimal DIVISOR = new BigDecimal(1000);
+    // -- HELPER
 
-    private static BigDecimal toSeconds(long millis) {
+    private static BigDecimal millisToSeconds(final long millis) {
         return new BigDecimal(millis)
-                .divide(DIVISOR, RoundingMode.HALF_EVEN)
+                .movePointLeft(3)
                 .setScale(3, RoundingMode.HALF_EVEN);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index 0d835c167b..05f133878d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
@@ -25,7 +25,6 @@ import java.util.SortedSet;
 
 import javax.inject.Named;
 
-import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index eb57e7dfb8..1a00cc1b4a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -45,8 +45,6 @@ import 
org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.collections._Multimaps;
-import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
 import 
org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitConfiguration;
@@ -85,7 +83,8 @@ implements ApplicationFeatureRepository, MetamodelListener {
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
propertyFeatures = _Maps.newTreeMap();
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
collectionFeatures = _Maps.newTreeMap();
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
actionFeatures = _Maps.newTreeMap();
-    private final ListMultimap<String, ApplicationFeature> 
memberFeaturesByLogicalTypeName = _Multimaps.newListTreeMultimap();
+    // apparently not used
+    //private final ListMultimap<String, ApplicationFeature> 
memberFeaturesByLogicalTypeName = _Multimaps.newListTreeMultimap();
 
     private final IsisConfiguration configuration;
     private final SpecificationLoader specificationLoader;
@@ -136,8 +135,8 @@ implements ApplicationFeatureRepository, MetamodelListener {
         visitFeatureIdentifierByName(typeFeatures, featuresByName::put);
         visitFeatureIdentifierByName(memberFeatures, featuresByName::put);
         this.featureIdentifiersByName = 
Collections.unmodifiableMap(featuresByName);
-        memberFeatures.forEach((key, value) ->
-            
memberFeaturesByLogicalTypeName.putElement(key.getLogicalTypeName(), value));
+//        memberFeatures.forEach((key, value) ->
+//            
memberFeaturesByLogicalTypeName.putElement(key.getLogicalTypeName(), value));
     }
 
     private void visitFeatureIdentifierByName(
diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/isis/extensions/commandlog/applib/dom/CommandLogEntry.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/isis/extensions/commandlog/applib/dom/CommandLogEntry.java
index cea4d6a3b5..b56503b736 100644
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/isis/extensions/commandlog/applib/dom/CommandLogEntry.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/isis/extensions/commandlog/applib/dom/CommandLogEntry.java
@@ -60,8 +60,8 @@ import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.functional.Try;
-import org.apache.isis.commons.internal.base._BigDecimals;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.base._Times;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import 
org.apache.isis.extensions.commandlog.applib.IsisModuleExtCommandLogApplib;
 import org.apache.isis.schema.cmd.v2.CommandDto;
@@ -136,7 +136,7 @@ implements Comparable<CommandLogEntry>, DomainChangeRecord, 
HasCommandDto {
 
 
     @Programmatic
-    public void init(Command command) {
+    public void init(final Command command) {
 
         setInteractionId(command.getInteractionId());
         setUsername(command.getUsername());
@@ -338,6 +338,7 @@ implements Comparable<CommandLogEntry>, DomainChangeRecord, 
HasCommandDto {
         String ALLOWS_NULL = 
DomainChangeRecord.LogicalMemberIdentifier.ALLOWS_NULL;
 
     }
+    @Override
     @LogicalMemberIdentifier
     public abstract String getLogicalMemberIdentifier();
     public abstract void setLogicalMemberIdentifier(String 
logicalMemberIdentifier);
@@ -427,7 +428,8 @@ implements Comparable<CommandLogEntry>, DomainChangeRecord, 
HasCommandDto {
     @Digits(integer=5, fraction=3)
     @Duration
     public BigDecimal getDuration() {
-        return _BigDecimals.durationBetween(getStartedAt(), getCompletedAt());
+        return _Times.secondsBetweenAsDecimal(getStartedAt(), getCompletedAt())
+                .orElse(null);
     }
 
 
diff --git 
a/extensions/core/executionlog/applib/src/main/java/org/apache/isis/extensions/executionlog/applib/dom/ExecutionLogEntry.java
 
b/extensions/core/executionlog/applib/src/main/java/org/apache/isis/extensions/executionlog/applib/dom/ExecutionLogEntry.java
index 6eca21fe02..c9602ff625 100644
--- 
a/extensions/core/executionlog/applib/src/main/java/org/apache/isis/extensions/executionlog/applib/dom/ExecutionLogEntry.java
+++ 
b/extensions/core/executionlog/applib/src/main/java/org/apache/isis/extensions/executionlog/applib/dom/ExecutionLogEntry.java
@@ -58,7 +58,7 @@ import 
org.apache.isis.applib.services.tablecol.TableColumnOrderForCollectionTyp
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.util.ToString;
-import org.apache.isis.commons.internal.base._BigDecimals;
+import org.apache.isis.commons.internal.base._Times;
 import 
org.apache.isis.extensions.executionlog.applib.IsisModuleExtExecutionLogApplib;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
 import org.apache.isis.schema.ixn.v2.MemberExecutionDto;
@@ -122,19 +122,19 @@ implements Comparable<ExecutionLogEntry>, 
DomainChangeRecord, HasInteractionIdAn
 
     @UtilityClass
     protected static class Util {
-        public static String abbreviated(String str, int maxLength) {
+        public static String abbreviated(final String str, final int 
maxLength) {
             return str != null ? (str.length() < maxLength ? str : 
str.substring(0, maxLength - 3) + "...") : null;
         }
     }
 
     @Inject BookmarkService bookmarkService;
 
-    public ExecutionLogEntry(@NonNull Execution<? extends 
MemberExecutionDto,?> execution) {
+    public ExecutionLogEntry(@NonNull final Execution<? extends 
MemberExecutionDto,?> execution) {
         init(execution);
     }
 
     @Programmatic
-    public void init(Execution<? extends MemberExecutionDto, ?> execution) {
+    public void init(final Execution<? extends MemberExecutionDto, ?> 
execution) {
         val interactionId = execution.getInteraction().getInteractionId();
         setInteractionId(interactionId);
 
@@ -336,6 +336,7 @@ implements Comparable<ExecutionLogEntry>, 
DomainChangeRecord, HasInteractionIdAn
         boolean NULLABLE = false;
         String ALLOWS_NULL = "false";
     }
+    @Override
     @LogicalMemberIdentifier
     public abstract String getLogicalMemberIdentifier();
     public abstract void setLogicalMemberIdentifier(String 
logicalMemberIdentifier);
@@ -420,7 +421,8 @@ implements Comparable<ExecutionLogEntry>, 
DomainChangeRecord, HasInteractionIdAn
      */
     @Duration
     public BigDecimal getDuration() {
-        return _BigDecimals.durationBetween(getStartedAt(), getCompletedAt());
+        return _Times.secondsBetweenAsDecimal(getStartedAt(), getCompletedAt())
+                .orElse(null);
     }
 
 
diff --git 
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/isis/extensions/executionoutbox/applib/dom/ExecutionOutboxEntry.java
 
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/isis/extensions/executionoutbox/applib/dom/ExecutionOutboxEntry.java
index d0245044b2..52bda2a970 100644
--- 
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/isis/extensions/executionoutbox/applib/dom/ExecutionOutboxEntry.java
+++ 
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/isis/extensions/executionoutbox/applib/dom/ExecutionOutboxEntry.java
@@ -58,7 +58,7 @@ import 
org.apache.isis.applib.services.tablecol.TableColumnOrderForCollectionTyp
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.util.ToString;
-import org.apache.isis.commons.internal.base._BigDecimals;
+import org.apache.isis.commons.internal.base._Times;
 import 
org.apache.isis.extensions.executionoutbox.applib.IsisModuleExtExecutionOutboxApplib;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
 import org.apache.isis.schema.ixn.v2.MemberExecutionDto;
@@ -112,19 +112,19 @@ implements Comparable<ExecutionOutboxEntry>, 
DomainChangeRecord, HasInteractionI
 
     @UtilityClass
     protected static class Util {
-        public static String abbreviated(String str, int maxLength) {
+        public static String abbreviated(final String str, final int 
maxLength) {
             return str != null ? (str.length() < maxLength ? str : 
str.substring(0, maxLength - 3) + "...") : null;
         }
     }
 
     @Inject BookmarkService bookmarkService;
 
-    public ExecutionOutboxEntry(@NonNull Execution<? extends 
MemberExecutionDto,?> execution) {
+    public ExecutionOutboxEntry(@NonNull final Execution<? extends 
MemberExecutionDto,?> execution) {
         init(execution);
     }
 
     @Programmatic
-    public void init(Execution<? extends MemberExecutionDto, ?> execution) {
+    public void init(final Execution<? extends MemberExecutionDto, ?> 
execution) {
         val interactionId = execution.getInteraction().getInteractionId();
         setInteractionId(interactionId);
 
@@ -326,6 +326,7 @@ implements Comparable<ExecutionOutboxEntry>, 
DomainChangeRecord, HasInteractionI
         boolean NULLABLE = false;
         String ALLOWS_NULL = "false";
     }
+    @Override
     @LogicalMemberIdentifier
     public abstract String getLogicalMemberIdentifier();
     public abstract void setLogicalMemberIdentifier(String 
logicalMemberIdentifier);
@@ -410,7 +411,8 @@ implements Comparable<ExecutionOutboxEntry>, 
DomainChangeRecord, HasInteractionI
      */
     @Duration
     public BigDecimal getDuration() {
-        return _BigDecimals.durationBetween(getStartedAt(), getCompletedAt());
+        return _Times.secondsBetweenAsDecimal(getStartedAt(), getCompletedAt())
+                .orElse(null);
     }
 
 

Reply via email to