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 2021/12/23 08:50:41 UTC

[isis] branch master updated: ISIS-2929: adds DataTableModel data-row by UUID lookup caching

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 74c6166  ISIS-2929: adds DataTableModel data-row by UUID lookup caching
74c6166 is described below

commit 74c61667d0c465d7d2156baa1e722fca4f33648e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Dec 23 09:50:18 2021 +0100

    ISIS-2929: adds DataTableModel data-row by UUID lookup caching
---
 .../metamodel/interactions/managed/nonscalar/DataTableModel.java | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
index 37ac9f2..cede043 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
@@ -19,6 +19,7 @@
 package org.apache.isis.core.metamodel.interactions.managed.nonscalar;
 
 import java.io.Serializable;
+import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -33,6 +34,7 @@ import org.apache.isis.commons.internal.binding._BindableAbstract;
 import org.apache.isis.commons.internal.binding._Bindables;
 import org.apache.isis.commons.internal.binding._Observables;
 import org.apache.isis.commons.internal.binding._Observables.LazyObservable;
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
@@ -174,11 +176,12 @@ implements MultiselectChoices {
         return getMetaModel().getElementType();
     }
 
+    private final Map<UUID, Optional<DataRow>> dataRowByUuidLookupCache = _Maps.newConcurrentHashMap();
     public Optional<DataRow> lookupDataRow(final @NonNull UUID uuid) {
-        //TODO can be safely cached
-        return getDataRowsFiltered().getValue().stream()
+        // lookup can be safely cached
+        return dataRowByUuidLookupCache.computeIfAbsent(uuid, __->getDataRowsFiltered().getValue().stream()
                 .filter(dr->dr.getUuid().equals(uuid))
-                .findFirst();
+                .findFirst());
     }
 
     // -- TOGGLE ALL