diff --git a/src/main/java/io/gitlab/jfronny/commons/data/MutCollection.java b/src/main/java/io/gitlab/jfronny/commons/data/MutCollection.java new file mode 100644 index 0000000..0b6a819 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/MutCollection.java @@ -0,0 +1,89 @@ +package io.gitlab.jfronny.commons.data; + +import java.util.*; + +public class MutCollection { + public static Map mapOf() { + return new LinkedHashMap<>(); + } + + public static Map mapOf(K k1, V v1) { + Map map = mapOf(); + map.put(k1, v1); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2) { + Map map = mapOf(k1, v1); + map.put(k2, v2); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3) { + Map map = mapOf(k1, v1, k2, v2); + map.put(k3, v3); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + Map map = mapOf(k1, v1, k2, v2, k3, v3); + map.put(k4, v4); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4); + map.put(k5, v5); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5); + map.put(k6, v6); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6); + map.put(k7, v7); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7); + map.put(k8, v8); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7, k8, v8); + map.put(k9, v9); + return map; + } + + public static Map mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) { + Map map = mapOf(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7, k8, v8, k9, v9); + map.put(k10, v10); + return map; + } + + public static Set setOf() { + return new LinkedHashSet<>(); + } + + public static Set setOf(T... entries) { + Set set = setOf(); + set.addAll(Arrays.asList(entries)); + return set; + } + + public static List listOf() { + return new LinkedList<>(); + } + + public static List listOf(T... entries) { + List list = listOf(); + list.addAll(Arrays.asList(entries)); + return list; + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateCollection.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateCollection.java new file mode 100644 index 0000000..673c337 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateCollection.java @@ -0,0 +1,96 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.function.IntFunction; +import java.util.function.Predicate; +import java.util.stream.Stream; + +public class DelegateCollection> extends DelegateIterable implements Collection { + public DelegateCollection(S delegate) { + super(delegate); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return delegate.contains(o); + } + + @NotNull + @Override + public Object[] toArray() { + return delegate.toArray(); + } + + @NotNull + @Override + public T1[] toArray(@NotNull T1[] t1s) { + return delegate.toArray(t1s); + } + + @Override + public T1[] toArray(IntFunction generator) { + return delegate.toArray(generator); + } + + @Override + public boolean add(T t) { + return delegate.add(t); + } + + @Override + public boolean remove(Object o) { + return delegate.remove(o); + } + + @Override + public boolean containsAll(@NotNull Collection collection) { + return delegate.containsAll(collection); + } + + @Override + public boolean addAll(@NotNull Collection collection) { + return delegate.addAll(collection); + } + + @Override + public boolean removeAll(@NotNull Collection collection) { + return delegate.removeAll(collection); + } + + @Override + public boolean removeIf(Predicate filter) { + return delegate.removeIf(filter); + } + + @Override + public boolean retainAll(@NotNull Collection collection) { + return delegate.retainAll(collection); + } + + @Override + public void clear() { + delegate.clear(); + } + + @Override + public Stream stream() { + return delegate.stream(); + } + + @Override + public Stream parallelStream() { + return delegate.parallelStream(); + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateIterable.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateIterable.java new file mode 100644 index 0000000..b3c17ed --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateIterable.java @@ -0,0 +1,29 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import org.jetbrains.annotations.NotNull; + +import java.util.Iterator; +import java.util.Spliterator; +import java.util.function.Consumer; + +public class DelegateIterable> extends DelegateObject implements Iterable { + public DelegateIterable(S delegate) { + super(delegate); + } + + @NotNull + @Override + public Iterator iterator() { + return delegate.iterator(); + } + + @Override + public void forEach(Consumer action) { + delegate.forEach(action); + } + + @Override + public Spliterator spliterator() { + return delegate.spliterator(); + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateList.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateList.java new file mode 100644 index 0000000..48295fc --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateList.java @@ -0,0 +1,75 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.function.UnaryOperator; + +public class DelegateList> extends DelegateCollection implements List { + public DelegateList(S delegate) { + super(delegate); + } + + @Override + public boolean addAll(int i, @NotNull Collection collection) { + return delegate.addAll(i, collection); + } + + @Override + public void replaceAll(UnaryOperator operator) { + delegate.replaceAll(operator); + } + + @Override + public void sort(Comparator c) { + delegate.sort(c); + } + + @Override + public T get(int i) { + return delegate.get(i); + } + + @Override + public T set(int i, T t) { + return delegate.set(i, t); + } + + @Override + public void add(int i, T t) { + delegate.add(i, t); + } + + @Override + public T remove(int i) { + return delegate.remove(i); + } + + @Override + public int indexOf(Object o) { + return delegate.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return delegate.lastIndexOf(o); + } + + @NotNull + @Override + public ListIterator listIterator() { + return delegate.listIterator(); + } + + @NotNull + @Override + public ListIterator listIterator(int i) { + return delegate.listIterator(i); + } + + @NotNull + @Override + public List subList(int i, int i1) { + return delegate.subList(i, i1); + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateMap.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateMap.java new file mode 100644 index 0000000..ed8efaa --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateMap.java @@ -0,0 +1,149 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.function.*; + +public class DelegateMap extends DelegateObject> implements Map { + public DelegateMap(Map delegate) { + super(delegate); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public boolean containsKey(Object o) { + return false; + } + + @Override + public boolean containsValue(Object o) { + return false; + } + + @Override + public V get(Object o) { + return null; + } + + @Nullable + @Override + public V put(K k, V v) { + return null; + } + + @Override + public V remove(Object o) { + return null; + } + + @Override + public void putAll(@NotNull Map map) { + + } + + @Override + public void clear() { + + } + + @NotNull + @Override + public Set keySet() { + return null; + } + + @NotNull + @Override + public Collection values() { + return null; + } + + @NotNull + @Override + public Set> entrySet() { + return null; + } + + @Override + public V getOrDefault(Object key, V defaultValue) { + return Map.super.getOrDefault(key, defaultValue); + } + + @Override + public void forEach(BiConsumer action) { + Map.super.forEach(action); + } + + @Override + public void replaceAll(BiFunction function) { + Map.super.replaceAll(function); + } + + @Nullable + @Override + public V putIfAbsent(K key, V value) { + return Map.super.putIfAbsent(key, value); + } + + @Override + public boolean remove(Object key, Object value) { + return Map.super.remove(key, value); + } + + @Override + public boolean replace(K key, V oldValue, V newValue) { + return Map.super.replace(key, oldValue, newValue); + } + + @Nullable + @Override + public V replace(K key, V value) { + return Map.super.replace(key, value); + } + + @Override + public V computeIfAbsent(K key, @NotNull Function mappingFunction) { + return Map.super.computeIfAbsent(key, mappingFunction); + } + + @Override + public V computeIfPresent(K key, @NotNull BiFunction remappingFunction) { + return Map.super.computeIfPresent(key, remappingFunction); + } + + @Override + public V compute(K key, @NotNull BiFunction remappingFunction) { + return Map.super.compute(key, remappingFunction); + } + + @Override + public V merge(K key, @NotNull V value, @NotNull BiFunction remappingFunction) { + return Map.super.merge(key, value, remappingFunction); + } + + @Override + public V set(K key, V value) { + return Map.super.set(key, value); + } + + @Override + public Object call(Object proxy, Class iface, String name, String actualName, Class returnType, Class[] paramTypes, Object[] args) { + return Map.super.call(proxy, iface, name, actualName, returnType, paramTypes, args); + } + + @Override + public Iterator> iterator() { + return Map.super.iterator(); + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateObject.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateObject.java new file mode 100644 index 0000000..998ba65 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateObject.java @@ -0,0 +1,30 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import java.util.Objects; + +public class DelegateObject { + protected final T delegate; + + public DelegateObject(T delegate) { + this.delegate = Objects.requireNonNull(delegate) instanceof DelegateObject dob ? (T) dob.unwrap() : delegate; + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof DelegateObject dob ? delegate.equals(dob.delegate) : delegate.equals(obj); + } + + @Override + public String toString() { + return delegate.toString(); + } + + private T unwrap() { + return delegate instanceof DelegateObject dob ? (T) dob.unwrap() : delegate; + } +} diff --git a/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateSet.java b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateSet.java new file mode 100644 index 0000000..6686b70 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/commons/data/delegate/DelegateSet.java @@ -0,0 +1,9 @@ +package io.gitlab.jfronny.commons.data.delegate; + +import java.util.Set; + +public class DelegateSet> extends DelegateCollection implements Set { + public DelegateSet(S delegate) { + super(delegate); + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 67325bc..3749f02 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -5,6 +5,7 @@ module io.gitlab.jfronny.commons { exports io.gitlab.jfronny.commons; exports io.gitlab.jfronny.commons.cache; exports io.gitlab.jfronny.commons.data; + exports io.gitlab.jfronny.commons.data.delegate; exports io.gitlab.jfronny.commons.io; exports io.gitlab.jfronny.commons.log; exports io.gitlab.jfronny.commons.ref;