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 2020/07/12 07:45:21 UTC

[isis] branch master updated: ISIS-2340: some extensions to internal API

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 65c4c61  ISIS-2340: some extensions to internal API
65c4c61 is described below

commit 65c4c610fa1696fd7fc8fae9b75986223fcfc86a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jul 12 09:45:02 2020 +0200

    ISIS-2340: some extensions to internal API
---
 .../main/java/org/apache/isis/core/commons/collections/Can.java  | 4 ++++
 .../java/org/apache/isis/core/commons/collections/Can_Empty.java | 6 ++++++
 .../org/apache/isis/core/commons/collections/Can_Multiple.java   | 7 +++++++
 .../org/apache/isis/core/commons/collections/Can_Singleton.java  | 9 +++++++++
 .../isis/core/commons/internal/exceptions/_Exceptions.java       | 8 ++++++++
 5 files changed, 34 insertions(+)

diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can.java
index 913f177..6a8861b 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can.java
@@ -422,6 +422,8 @@ public interface Can<T> extends Iterable<T>, Serializable {
      *         (<tt>index &lt; 0 || index &gt; size()</tt>)
      */
     Can<T> add(int index, T element);
+    
+    Can<T> replace(int index, T element);
 
     /**
      * Removes the element at the specified position in this list (optional
@@ -548,5 +550,7 @@ public interface Can<T> extends Iterable<T>, Serializable {
      * @return a non-null array, containing the elements of this Can
      */
     T[] toArray(Class<T> elementType);
+
+    
     
 }
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Empty.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Empty.java
index adf1522..a28650a 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Empty.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Empty.java
@@ -28,6 +28,7 @@ import java.util.function.Supplier;
 import java.util.stream.Stream;
 
 import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
@@ -100,6 +101,11 @@ final class Can_Empty<T> implements Can<T> {
         }
         return Can.ofSingleton(element);
     }
+    
+    @Override
+    public Can<T> replace(int index, T element) {
+        throw _Exceptions.unsupportedOperation("cannot replace an element in an empty Can");
+    }
 
     @Override
     public Can<T> remove(int index) {
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Multiple.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Multiple.java
index 8e9f097..bf51e67 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Multiple.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Multiple.java
@@ -121,6 +121,13 @@ final class Can_Multiple<T> implements Can<T> {
     }
 
     @Override
+    public Can<T> replace(int index, T element) {
+        val newElements = new ArrayList<T>(elements);
+        newElements.set(index, element);
+        return Can.ofCollection(newElements);
+    }
+    
+    @Override
     public Can<T> remove(int index) {
         val newElements = new ArrayList<T>(elements);
         newElements.remove(index);
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Singleton.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Singleton.java
index d39d83f..f58ff64 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Singleton.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Can_Singleton.java
@@ -113,6 +113,15 @@ final class Can_Singleton<T> implements Can<T> {
         throw new IndexOutOfBoundsException(
                 "cannot add to singleton with index other than 0 or 1; got " + index);
     }
+    
+    @Override
+    public Can<T> replace(int index, T element) {
+        if(index==0) {
+            return Can.ofSingleton(element);    
+        }
+        throw new IndexOutOfBoundsException(
+                "cannot replace on singleton with index other than 0; got " + index);
+    }
 
     @Override
     public Can<T> remove(int index) {
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/core/commons/internal/exceptions/_Exceptions.java
index 6437cdd..741d271 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/internal/exceptions/_Exceptions.java
@@ -140,6 +140,14 @@ public final class _Exceptions {
         return new UnsupportedOperationException("unrecoverable error: method call not allowed/supported");
     }
     
+    public static UnsupportedOperationException unsupportedOperation(String msg) {
+        return new UnsupportedOperationException(msg);
+    }
+    
+    public static UnsupportedOperationException unsupportedOperation(String format, Object ...args) {
+        return new UnsupportedOperationException(String.format(format, args));
+    }
+    
     // -- ASSERT
     
     public static AssertionError assertionError(String msg) {