From 9825893f9b0ba4f205d6fcf9ae3fd6b4e2ff3873 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 20 Mar 2023 10:58:46 -0500 Subject: [PATCH] Initial checkin --- .../core/utils/collections/ListBuilder.java | 199 ++++++++++++++++++ .../utils/collections/ListBuilderTest.java | 72 +++++++ 2 files changed, 271 insertions(+) create mode 100644 qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilder.java create mode 100644 qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilderTest.java diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilder.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilder.java new file mode 100644 index 00000000..6d7b3f7a --- /dev/null +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilder.java @@ -0,0 +1,199 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2023. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.utils.collections; + + +import java.util.ArrayList; +import java.util.List; + + +/******************************************************************************* + ** List.of is "great", but annoying because it makes unmodifiable lists... + ** So, replace it with this, which returns ArrayLists, which "don't suck" + *******************************************************************************/ +public class ListBuilder +{ + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1) + { + List rs = new ArrayList<>(); + rs.add(e1); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5, E e6) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + rs.add(e6); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + rs.add(e6); + rs.add(e7); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + rs.add(e6); + rs.add(e7); + rs.add(e8); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + rs.add(e6); + rs.add(e7); + rs.add(e8); + rs.add(e9); + return (rs); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static List of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) + { + List rs = new ArrayList<>(); + rs.add(e1); + rs.add(e2); + rs.add(e3); + rs.add(e4); + rs.add(e5); + rs.add(e6); + rs.add(e7); + rs.add(e8); + rs.add(e9); + rs.add(e10); + return (rs); + } + +} diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilderTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilderTest.java new file mode 100644 index 00000000..23c44a78 --- /dev/null +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/collections/ListBuilderTest.java @@ -0,0 +1,72 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2023. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.utils.collections; + + +import java.util.List; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + + +/******************************************************************************* + ** Unit test for ListBuilder + *******************************************************************************/ +class ListBuilderTest +{ + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testSameAsListOf() + { + assertEquals(List.of(1), ListBuilder.of(1)); + assertEquals(List.of(1, 2), ListBuilder.of(1, 2)); + assertEquals(List.of(1, 2, 3), ListBuilder.of(1, 2, 3)); + assertEquals(List.of(1, 2, 3, 4), ListBuilder.of(1, 2, 3, 4)); + assertEquals(List.of(1, 2, 3, 4, 5), ListBuilder.of(1, 2, 3, 4, 5)); + assertEquals(List.of(1, 2, 3, 4, 5, 6), ListBuilder.of(1, 2, 3, 4, 5, 6)); + assertEquals(List.of(1, 2, 3, 4, 5, 6, 7), ListBuilder.of(1, 2, 3, 4, 5, 6, 7)); + assertEquals(List.of(1, 2, 3, 4, 5, 6, 7, 8), ListBuilder.of(1, 2, 3, 4, 5, 6, 7, 8)); + assertEquals(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9), ListBuilder.of(1, 2, 3, 4, 5, 6, 7, 8, 9)); + assertEquals(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ListBuilder.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testBetterThanListMapOf() + { + /////////////////////////////// + // assert this doesn't throw // + /////////////////////////////// + List list = ListBuilder.of(1, null, 3); + + /////////////////////////////////////// + // this too, doesn't freaking throw. // + /////////////////////////////////////// + list.add(4); + } +} \ No newline at end of file