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/07/26 05:18:06 UTC

[isis] branch master updated: ISIS-3091: commons: for convenience, adds multimap variant: TreeMap of ArrayLists

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 27f5586b49 ISIS-3091: commons: for convenience, adds multimap variant: TreeMap of ArrayLists
27f5586b49 is described below

commit 27f5586b49ab0f9c615c519ea9084ece11987bcd
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jul 26 07:18:00 2022 +0200

    ISIS-3091: commons: for convenience, adds multimap variant: TreeMap of
    ArrayLists
---
 .../apache/isis/commons/internal/collections/_Multimaps.java   |  7 +++++++
 .../services/appfeat/ApplicationFeatureRepositoryDefault.java  | 10 ++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java b/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
index 86203164f2..e312d57260 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
@@ -349,6 +349,13 @@ public class _Multimaps {
         return newListMultimap(HashMap<K, List<V>>::new, ArrayList::new);
     }
 
+    /**
+     * @return TreeMap of ArrayLists
+     */
+    public static <K, V> ListMultimap<K, V> newListTreeMultimap(){
+        return newListMultimap(TreeMap<K, List<V>>::new, ArrayList::new);
+    }
+
     /**
      * @return ConcurrentHashMap of CopyOnWriteArrayList (fully concurrent)
      */
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 8e3c4f79e8..eb57e7dfb8 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
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.metamodel.services.appfeat;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -46,6 +45,8 @@ 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;
@@ -84,7 +85,7 @@ 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 SortedMap<String, List<ApplicationFeature>> memberFeaturesByLogicalTypeName = _Maps.newTreeMap();
+    private final ListMultimap<String, ApplicationFeature> memberFeaturesByLogicalTypeName = _Multimaps.newListTreeMultimap();
 
     private final IsisConfiguration configuration;
     private final SpecificationLoader specificationLoader;
@@ -135,7 +136,8 @@ implements ApplicationFeatureRepository, MetamodelListener {
         visitFeatureIdentifierByName(typeFeatures, featuresByName::put);
         visitFeatureIdentifierByName(memberFeatures, featuresByName::put);
         this.featureIdentifiersByName = Collections.unmodifiableMap(featuresByName);
-        memberFeatures.forEach((key, value) -> memberFeaturesByLogicalTypeName.computeIfAbsent(key.getLogicalTypeName(), k -> new ArrayList<>()).add(value));
+        memberFeatures.forEach((key, value) ->
+            memberFeaturesByLogicalTypeName.putElement(key.getLogicalTypeName(), value));
     }
 
     private void visitFeatureIdentifierByName(
@@ -448,7 +450,7 @@ implements ApplicationFeatureRepository, MetamodelListener {
     }
 
     @Override
-    public SortedSet<ApplicationFeatureId> propertyIdsFor(LogicalType logicalType) {
+    public SortedSet<ApplicationFeatureId> propertyIdsFor(final LogicalType logicalType) {
         ApplicationFeatureId typeFeatureId = typeFeatureIdByLogicalType.get(logicalType);
         if (typeFeatureId == null) {
             return Collections.emptySortedSet();