Support multiple api's within a q instance. For science!

This commit is contained in:
2023-04-04 13:40:32 -05:00
parent e35761e0a6
commit e779c392bb
21 changed files with 1171 additions and 341 deletions

View File

@ -22,6 +22,9 @@
package com.kingsrook.qqq.backend.core.utils;
import com.kingsrook.qqq.backend.core.utils.lambdas.UnsafeSupplier;
/*******************************************************************************
**
*******************************************************************************/
@ -48,4 +51,49 @@ public class ObjectUtils
throw (new NullPointerException("all null objects"));
}
/*******************************************************************************
** Like Objects.requireNonNullElse, only use an (unsafe) supplier as the first
** arg, and only if it throws, return the 2nd arg
*******************************************************************************/
public static <T> T tryElse(UnsafeSupplier<T, ?> supplier, T defaultIfThrew)
{
try
{
return (supplier.get());
}
catch(Exception e)
{
return (defaultIfThrew);
}
}
/*******************************************************************************
** Like Objects.requireNonNullElse, only use an (unsafe) supplier as the first
** arg, and if it throws or returns null, then return the 2nd arg
*******************************************************************************/
public static <T> T tryAndRequireNonNullElse(UnsafeSupplier<T, ?> supplier, T defaultIfThrew)
{
try
{
T t = supplier.get();
if(t != null)
{
return (t);
}
}
catch(Exception e)
{
//////////
// noop //
//////////
}
return (defaultIfThrew);
}
}

View File

@ -25,6 +25,7 @@ package com.kingsrook.qqq.backend.core.utils;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
/*******************************************************************************
@ -36,8 +37,9 @@ class ObjectUtilsTest
/*******************************************************************************
**
*******************************************************************************/
@SuppressWarnings({ "DataFlowIssue", "ConfusingArgumentToVarargsMethod" })
@Test
void test()
void testRequireNonNullElse()
{
assertThatThrownBy(() -> ObjectUtils.requireNonNullElse(null)).isInstanceOf(NullPointerException.class);
assertThatThrownBy(() -> ObjectUtils.requireNonNullElse(null, null)).isInstanceOf(NullPointerException.class);
@ -47,4 +49,34 @@ class ObjectUtilsTest
assertEquals("c", ObjectUtils.requireNonNullElse(null, null, "c"));
}
/*******************************************************************************
**
*******************************************************************************/
@SuppressWarnings({ "StringOperationCanBeSimplified", "DataFlowIssue" })
@Test
void testTryElse()
{
String nullString = null;
assertEquals("tried", ObjectUtils.tryElse(() -> "tried".toString(), "else"));
assertEquals("else", ObjectUtils.tryElse(() -> nullString.toString(), "else"));
assertNull(ObjectUtils.tryElse(() -> null, "else"));
}
/*******************************************************************************
**
*******************************************************************************/
@SuppressWarnings({ "StringOperationCanBeSimplified", "DataFlowIssue" })
@Test
void testTryAndRequireNonNullElse()
{
String nullString = null;
assertEquals("tried", ObjectUtils.tryAndRequireNonNullElse(() -> "tried".toString(), "else"));
assertEquals("else", ObjectUtils.tryAndRequireNonNullElse(() -> nullString.toString(), "else"));
assertEquals("else", ObjectUtils.tryAndRequireNonNullElse(() -> null, "else"));
}
}