diff --git a/README.md b/README.md
index 957f8f1..cb95e5b 100644
--- a/README.md
+++ b/README.md
@@ -49,12 +49,12 @@ framework and objects.
com.javaquery
util
- 1.2.6
+ 1.2.7
```
# Gradle
```
-implementation 'com.javaquery:util:1.2.6'
+implementation 'com.javaquery:util:1.2.7'
```
diff --git a/build.gradle b/build.gradle
index 582e4c0..7d50265 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,22 +5,23 @@ plugins {
}
sourceCompatibility = 1.8
+targetCompatibility = 1.8
group 'com.javaquery'
archivesBaseName = 'util'
-version '1.2.6'
+version '1.2.7'
repositories {
mavenCentral()
}
dependencies {
- implementation('org.slf4j:slf4j-api:2.0.11')
- implementation('org.json:json:20231013')
- implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.16.1'
+ implementation 'org.slf4j:slf4j-api:2.0.16'
+ implementation 'org.json:json:20250107'
+ implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.18.2'
testImplementation 'net.logstash.logback:logstash-logback-encoder:7.4'
- testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.3.14'
- testImplementation('org.junit.jupiter:junit-jupiter:5.7.0')
+ testImplementation 'ch.qos.logback:logback-classic:1.3.15'
+ testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4'
}
test {
diff --git a/src/main/java/com/javaquery/util/ExecutionContext.java b/src/main/java/com/javaquery/util/ExecutionContext.java
index cb32032..1cf6ebc 100644
--- a/src/main/java/com/javaquery/util/ExecutionContext.java
+++ b/src/main/java/com/javaquery/util/ExecutionContext.java
@@ -42,6 +42,7 @@ public class ExecutionContext {
public ExecutionContext() {
this.createdAt = Dates.current();
+ this.meta = new HashMap<>();
}
public ExecutionContext(String requestId){
@@ -123,6 +124,10 @@ public Object getMeta(String key, Object defaultValue){
return meta.getOrDefault(key, defaultValue);
}
+ public String optString(String key, String defaultValue){
+ return String.valueOf(getMeta(key, defaultValue));
+ }
+
public void addMeta(String key, Object value){
this.meta.put(key, value);
}
diff --git a/src/main/java/com/javaquery/util/Is.java b/src/main/java/com/javaquery/util/Is.java
index d789b92..f011156 100644
--- a/src/main/java/com/javaquery/util/Is.java
+++ b/src/main/java/com/javaquery/util/Is.java
@@ -47,6 +47,18 @@ public static boolean nonNull(Object obj) {
return Objects.nonNull(obj);
}
+ /**
+ * Execute code if the provided reference is non-{@code null}.
+ *
+ * @param obj a reference to be checked against {@code null}
+ * @param executableFunction lambda function given executed if the provided reference is non-{@code null}.
+ */
+ public static void nonNull(Object obj, ExecutableFunction executableFunction){
+ if(nonNull(obj)){
+ executableFunction.execute();
+ }
+ }
+
/**
* Returns {@code true} if the provided String is {@code null} or empty otherwise returns {@code
* false}.
diff --git a/src/main/java/com/javaquery/util/collection/JList.java b/src/main/java/com/javaquery/util/collection/JList.java
new file mode 100644
index 0000000..ed0f7e5
--- /dev/null
+++ b/src/main/java/com/javaquery/util/collection/JList.java
@@ -0,0 +1,16 @@
+package com.javaquery.util.collection;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author javaquery
+ * @since 1.2.7
+ */
+public class JList {
+
+ @SafeVarargs
+ public static List of(E... elements) {
+ return Arrays.asList(elements);
+ }
+}
diff --git a/src/main/java/com/javaquery/util/collection/JSet.java b/src/main/java/com/javaquery/util/collection/JSet.java
new file mode 100644
index 0000000..b8850af
--- /dev/null
+++ b/src/main/java/com/javaquery/util/collection/JSet.java
@@ -0,0 +1,15 @@
+package com.javaquery.util.collection;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author javaquery
+ * @since 1.2.7
+ */
+public class JSet {
+ public static Set of(E... elements) {
+ return new HashSet<>(Arrays.asList(elements));
+ }
+}
diff --git a/src/main/java/com/javaquery/util/number/Numbers.java b/src/main/java/com/javaquery/util/number/Numbers.java
index 7cf6245..2eb634a 100644
--- a/src/main/java/com/javaquery/util/number/Numbers.java
+++ b/src/main/java/com/javaquery/util/number/Numbers.java
@@ -11,9 +11,9 @@ public class Numbers {
/**
* Round the decimal number.
- * example: roundDecimal(10.123456789, 2) => 10.12
- * example: roundDecimal(10.123456789, 4) => 10.1235
- * example: roundDecimal(10.576, 2) => 10.58
+ * example: roundDecimal(10.123456789, 2) = 10.12
+ * example: roundDecimal(10.123456789, 4) = 10.1235
+ * example: roundDecimal(10.576, 2) = 10.58
*
* @param number number to round
* @param decimalPlaces decimal places to round
diff --git a/src/test/java/com/javaquery/util/TestExecutionContext.java b/src/test/java/com/javaquery/util/TestExecutionContext.java
index 34fb60e..327fac5 100644
--- a/src/test/java/com/javaquery/util/TestExecutionContext.java
+++ b/src/test/java/com/javaquery/util/TestExecutionContext.java
@@ -45,6 +45,7 @@ public void defaultConstructor(){
executionContext.setRequestId(UniqueIdGenerator.generate());
UserContext userContext = (UserContext) executionContext.getUserContext();
+ assertNotNull(executionContext.getMeta());
assertEquals(50L, userContext.getUserId());
assertNotNull(executionContext.getCreatedAt());
assertNotNull(executionContext.getRequestId());
@@ -102,6 +103,7 @@ public void constructorWithActionAndMeta(){
assertEquals(ExecutionContextAction.ONE, executionContext.getAction());
assertNull(executionContext.getReferenceId());
assertEquals("value", executionContext.getMeta("key", null));
+ assertEquals("not found", executionContext.optString("key2", "not found"));
assertNotNull(executionContext.getCreatedAt());
/* set meta */
@@ -142,4 +144,15 @@ public void constructorWithActionMaxRetries(){
assertNotNull(executionContext.getMeta());
assertNotNull(executionContext.getCreatedAt());
}
+
+ @Test
+ public void metaDataTest(){
+ ExecutionContext executionContext = new ExecutionContext<>();
+ executionContext.addMeta("key", "value");
+ assertEquals("value", executionContext.getMeta("key", null));
+ assertEquals("value", executionContext.optString("key", null));
+ assertEquals("not found", executionContext.optString("key2", "not found"));
+ executionContext.addMeta("key", "value2");
+ assertEquals("value2", executionContext.getMeta("key", null));
+ }
}
diff --git a/src/test/java/com/javaquery/util/collection/TestJList.java b/src/test/java/com/javaquery/util/collection/TestJList.java
new file mode 100644
index 0000000..9958111
--- /dev/null
+++ b/src/test/java/com/javaquery/util/collection/TestJList.java
@@ -0,0 +1,24 @@
+package com.javaquery.util.collection;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * @author javaquery
+ * @since 2025-01-20
+ */
+public class TestJList {
+
+ @Test
+ public void test_of(){
+ List list = JList.of("a", "b", "c");
+ assertEquals(3, list.size());
+ assertTrue(list.contains("a"));
+ assertTrue(list.contains("b"));
+ assertTrue(list.contains("c"));
+ }
+}
diff --git a/src/test/java/com/javaquery/util/collection/TestJSet.java b/src/test/java/com/javaquery/util/collection/TestJSet.java
new file mode 100644
index 0000000..f0a2aec
--- /dev/null
+++ b/src/test/java/com/javaquery/util/collection/TestJSet.java
@@ -0,0 +1,24 @@
+package com.javaquery.util.collection;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Set;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * @author javaquery
+ * @since 2025-01-20
+ */
+public class TestJSet {
+
+ @Test
+ public void test_of(){
+ Set set = JSet.of("a", "b", "c");
+ assertEquals(3, set.size());
+ assertTrue(set.contains("a"));
+ assertTrue(set.contains("b"));
+ assertTrue(set.contains("c"));
+ }
+}