diff --git a/.github/workflows/github-packages-publish.yml b/.github/workflows/github-packages-publish.yml index 74d97d4..1032b73 100644 --- a/.github/workflows/github-packages-publish.yml +++ b/.github/workflows/github-packages-publish.yml @@ -64,5 +64,8 @@ jobs: # Overwrite artefactVersion with tag name run: ./gradlew build -PartefactVersion=${{ github.event.release.tag_name }} + - name: List Output Items + run: ls -l ./**/build/libs + - name: Publish to Maven Central run: ./gradlew publish diff --git a/LICENSE b/LICENSE index 5d240f5..5548015 100644 --- a/LICENSE +++ b/LICENSE @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2023-2024 OnixByte (HK) + Copyright 2024-2025 OnixByte Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/build.gradle.kts b/build.gradle.kts index f723ee5..266e688 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,16 +43,12 @@ subprojects { dependencies { compileOnly("org.slf4j:slf4j-api:$slf4jVersion") - compileOnly("org.projectlombok:lombok:$lombokVersion") implementation("ch.qos.logback:logback-classic:$logbackVersion") annotationProcessor("org.slf4j:slf4j-api:$slf4jVersion") - annotationProcessor("org.projectlombok:lombok:$lombokVersion") testCompileOnly("org.slf4j:slf4j-api:$slf4jVersion") - testCompileOnly("org.projectlombok:lombok:$lombokVersion") testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion") testAnnotationProcessor("org.slf4j:slf4j-api:$slf4jVersion") - testAnnotationProcessor("org.projectlombok:lombok:$lombokVersion") } tasks.withType { diff --git a/devkit-core/build.gradle.kts b/devkit-core/build.gradle.kts index ddb0713..70c87a2 100644 --- a/devkit-core/build.gradle.kts +++ b/devkit-core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java index 3c88b7c..21ba66c 100644 --- a/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java +++ b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,13 @@ package com.onixbyte.devkit.core.exceptions; /** - * The {@code NotImplementedException} class is a custom runtime exception that represents a situation where a - * particular method or functionality is not implemented or is currently unavailable in the codebase. + * The {@code NotImplementedException} class is a custom runtime exception that represents a + * situation where a particular method or functionality is not implemented or is currently + * unavailable in the codebase. *

- * This exception is typically thrown when developers need to indicate that a specific part of the code is incomplete - * or requires further implementation. It serves as a placeholder to highlight unfinished sections of the application - * during development and testing phases. + * This exception is typically thrown when developers need to indicate that a specific part of the + * code is incomplete or requires further implementation. It serves as a placeholder to highlight + * unfinished sections of the application during development and testing phases. *

* Usage Example: *

@@ -33,16 +34,6 @@
  *     This feature will be implemented in a future release.""");
  * }
  * 
- * Contact - * * * @author Zihlu Wang * @version 1.1.0 @@ -67,7 +58,8 @@ public NotImplementedException(String message) { } /** - * Creates a new {@code NotImplementedException} with the specified error message and a cause for this exception. + * Creates a new {@code NotImplementedException} with the specified error message and a cause + * for this exception. * * @param message the error message associated with this exception * @param cause the cause of this exception @@ -86,8 +78,8 @@ public NotImplementedException(Throwable cause) { } /** - * Creates a new {@code NotImplementedException} with the specified error message, cause, suppression flag, and - * stack trace writable flag. + * Creates a new {@code NotImplementedException} with the specified error message, cause, + * suppression flag, and stack trace writable flag. * * @param message the error message associated with this * exception diff --git a/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java deleted file mode 100644 index dd116ca..0000000 --- a/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package contains commonly used exceptions will be used in JDevKit. - * - * @author Zihlu Wang - * @since 1.0.0 - */ -package com.onixbyte.devkit.core.exceptions; \ No newline at end of file diff --git a/devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java deleted file mode 100644 index 2300e53..0000000 --- a/devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package is the core part of JDevKit, an open-source Java Development - * Kit that provides a set of convenient tools to streamline code development - * and enhance productivity. This package serves as the core package containing - * common exceptions that are used throughout the entire JDevKit project. - *

- * JDevKit is designed to be modular, and other specific feature modules within - * the library may rely on these exceptions from the core package. - *

- * For more information and the latest version of JDevKit, please visit our - * website codecrafters.org.cn. - *

- * Contact - *

- * - * @since 1.0.0 - */ -package com.onixbyte.devkit.core; \ No newline at end of file diff --git a/devkit-core/src/main/java/com/onixbyte/devkit/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/package-info.java deleted file mode 100644 index 8cadf32..0000000 --- a/devkit-core/src/main/java/com/onixbyte/devkit/package-info.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package is the main part of JDevKit, an open-source Java class library - * that provides a set of convenient tools to streamline code development and - * enhance productivity. This package serves as the root package for several - * modules, containing {@code devkit-core}, {@code guid} and {@code dev-utils} - * module. - *

- * For more information and the latest version of JDevKit, please visit our - * website codecrafters.org.cn. - * - *

- * Contact - *

- * - * @since 1.0.0 - */ -package com.onixbyte.devkit; \ No newline at end of file diff --git a/devkit-core/src/main/resources/logback.xml b/devkit-core/src/main/resources/logback.xml index 6d26440..56cd5b7 100644 --- a/devkit-core/src/main/resources/logback.xml +++ b/devkit-core/src/main/resources/logback.xml @@ -1,6 +1,6 @@ - - + + diff --git a/devkit-core/src/test/java/com/onixbyte/devkit/core/exceptions/NotImplementationExceptionTest.java b/devkit-core/src/test/java/com/onixbyte/devkit/core/exceptions/NotImplementationExceptionTest.java index 28df00a..de38671 100644 --- a/devkit-core/src/test/java/com/onixbyte/devkit/core/exceptions/NotImplementationExceptionTest.java +++ b/devkit-core/src/test/java/com/onixbyte/devkit/core/exceptions/NotImplementationExceptionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/devkit-utils/build.gradle.kts b/devkit-utils/build.gradle.kts index a420987..0a8fd0f 100644 --- a/devkit-utils/build.gradle.kts +++ b/devkit-utils/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java index 1c47120..85bb220 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,8 @@ package com.onixbyte.devkit.utils; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; @@ -34,15 +35,44 @@ import java.util.UUID; /** - * {@link AesUtil} can help you encrypt and decrypt data with specified secret by AES algorithm. + * The {@link AesUtil} class provides utility methods for encrypting and decrypting data using the + * AES algorithm. This class supports both byte array and string data, and uses a specified secret + * key for encryption and decryption. + *

+ * The utility methods in this class are useful for scenarios where data needs to be securely + * encrypted and decrypted. + *

+ * + *

Example usage:

+ *
+ * {@code
+ * // Encrypting and decrypting byte array data
+ * byte[] secretKey = "43f72073956d4c81".getBytes(StandardCharsets.UTF_8);
+ * byte[] data = "Hello World".getBytes(StandardCharsets.UTF_8);
+ * byte[] encryptedData = AesUtil.encrypt(data, secretKey);
+ * byte[] decryptedData = AesUtil.decrypt(encryptedData, secretKey);
+ * System.out.println(new String(decryptedData, StandardCharsets.UTF_8)); // Output: Hello World
+ * 
+ * // Encrypting and decrypting string data
+ * String secret = "43f72073956d4c81";
+ * String encryptedString = AesUtil.encrypt("Hello World", secret);
+ * String decryptedString = AesUtil.decrypt(encryptedString, secret);
+ * System.out.println(decryptedString); // Output: Hello World
+ * 
+ * // Generating a random secret key
+ * String randomSecret = AesUtil.generateRandomSecret();
+ * System.out.println(randomSecret); // Output: A ramdomly generated 16-character long secret 
+ * }
+ * 
* * @author hubin@baomidou * @version 1.1.0 * @since 1.1.0 */ -@Slf4j public final class AesUtil { + private final static Logger log = LoggerFactory.getLogger(AesUtil.class); + /** * Encrypts the data using the AES algorithm with the given secret. * @@ -54,7 +84,7 @@ public static byte[] encrypt(byte[] data, byte[] secret) { try { var secretKeySpec = new SecretKeySpec(new SecretKeySpec(secret, AES).getEncoded(), AES); var cipher = Cipher.getInstance(AES_CBC_CIPHER); - cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(secret)); + cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(secret)); // set IV to secret return cipher.doFinal(data); } catch (NoSuchAlgorithmException | NoSuchPaddingException | UnsupportedOperationException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | @@ -78,7 +108,7 @@ public static byte[] decrypt(byte[] data, byte[] secret) { try { var secretKeySpec = new SecretKeySpec(new SecretKeySpec(secret, AES).getEncoded(), AES); var cipher = Cipher.getInstance(AES_CBC_CIPHER); - cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(secret)); + cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(secret)); // set IV to secret return cipher.doFinal(data); } catch (NoSuchAlgorithmException | NoSuchPaddingException | UnsupportedOperationException | InvalidKeyException | diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java index 18802bf..9dc467d 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,9 @@ package com.onixbyte.devkit.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -55,6 +58,8 @@ */ public final class Base64Util { + private final static Logger log = LoggerFactory.getLogger(Base64Util.class); + /** * Ensure that there is only one Base64 Encoder. * diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BoolUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BoolUtil.java index c97cb76..3d70220 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BoolUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BoolUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,18 +17,38 @@ package com.onixbyte.devkit.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.Arrays; import java.util.Objects; import java.util.function.BooleanSupplier; /** - * A util for boolean calculations. + * The {@link BoolUtil} class provides utility methods for boolean calculations. + * This class offers methods to perform logical operations such as AND, OR, and NOT on boolean values. + *

+ * The utility methods in this class are useful for scenarios where multiple boolean values need to be + * evaluated together, and for simplifying complex boolean expressions. + *

+ * + *

Example usage:

+ *
+ * {@code
+ * boolean result1 = BoolUtil.and(true, true, false); // false
+ * boolean result2 = BoolUtil.or(true, false, false); // true
+ * boolean result3 = BoolUtil.not(false); // true
+ * }
+ * 
* - * @author shaoxinke + * @author zihluwang * @version 1.6.2 + * @since 1.6.2 */ public final class BoolUtil { + private final static Logger log = LoggerFactory.getLogger(BoolUtil.class); + /** * Logical and calculation. * diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java index 0d339d6..354d7b2 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,9 @@ package com.onixbyte.devkit.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.Objects; import java.util.function.BooleanSupplier; import java.util.function.Supplier; @@ -32,8 +35,7 @@ *

* Example: *

- * // If you want to simplify an if (exp1 || exp2), you can use the
- * // following code:
+ * // If you want to simplify an if (exp1 || exp2), you can use the following code:
  * String r1 = BranchUtil.or(1 == 1, 2 == 1)
  *     .handle(() -> "1 is equal to 1 or 2 is equal to 1.");
  *
@@ -49,8 +51,7 @@
  *     }, () -> {
  *         // do something
  *     });
- * // If you only need an if branch, you can remove the second Supplier
- * // instance.
+ * // If you only need an if branch, you can remove the second Supplier instance.
  *
  * // To check if all boolean expressions are true, use the 'and' method:
  * BranchUtil.and(1 == 1, 2 == 1)
@@ -75,6 +76,8 @@
  */
 public final class BranchUtil {
 
+    private final static Logger log = LoggerFactory.getLogger(BranchUtil.class);
+
     /**
      * Create a {@code BranchUtil} instance.
      *
diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java
index 2c24283..1006a3d 100644
--- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java
+++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2024-2024 OnixByte.
+ * Copyright (C) 2024-2025 OnixByte.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,9 @@
 
 package com.onixbyte.devkit.utils;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
@@ -55,8 +58,7 @@
  * The above examples demonstrate how to use the {@code HashUtil} class to calculate hash values
  * for a given string using different algorithms.
  * 

- * Note: - * The hash functions provided by the HashUtil class are one-way hash functions, meaning the + * The hash functions provided by the {@link HashUtil} are one-way hash functions, meaning the * original data cannot be retrieved from the hash value. These hash functions are commonly used * for data integrity checks and password storage, but they should not be used for * encryption purposes. @@ -68,6 +70,8 @@ */ public final class HashUtil { + private final static Logger log = LoggerFactory.getLogger(HashUtil.class); + /** * Calculates the MD2 hash value of the specified string using the given charset. * diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java index a81e8cf..57f5b11 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,26 +17,76 @@ package com.onixbyte.devkit.utils; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.HashMap; import java.util.Map; -import java.util.Optional; /** - * {@code MapUtil} is a utility class that provides methods for converting objects to maps and maps - * to objects. + * The {@link MapUtil} class provides utility methods for converting between objects and maps. + * This class leverages the {@link ObjectMapAdapter} interface to perform the conversions. *

- * Note: Since version 1.4.2, this util class removed reflection API and transferred to a safer API. - * Please see documentation for more information. + * The utility methods in this class are useful for scenarios where objects need to be represented + * as maps for serialization, deserialization, or other purposes. + *

+ * + *

Example usage:

+ *
+ * {@code
+ * public class User {
+ *     private String name;
+ *     private int age;
+ *     
+ *     // getters and setters
+ * }
+ * 
+ * public class UserMapAdapter implements ObjectMapAdapter {
+ *     @Override
+ *     public Map toMap(User user) {
+ *         Map map = new HashMap<>();
+ *         map.put("name", user.getName());
+ *         map.put("age", user.getAge());
+ *         return map;
+ *     }
+ * 
+ *     @Override
+ *     public User fromMap(Map map) {
+ *         User user = new User();
+ *         user.setName((String) map.get("name"));
+ *         user.setAge((Integer) map.get("age"));
+ *         return user;
+ *     }
+ * }
+ * 
+ * public class Example {
+ *     public static void main(String[] args) {
+ *         User user = new User();
+ *         user.setName("John");
+ *         user.setAge(30);
+ *         
+ *         UserMapAdapter adapter = new UserMapAdapter();
+ *         
+ *         // Convert object to map
+ *         Map userMap = MapUtil.objectToMap(user, adapter);
+ *         System.out.println(userMap); // Output: {name=John, age=30}
+ *         
+ *         // Convert map to object
+ *         User newUser = MapUtil.mapToObject(userMap, adapter);
+ *         System.out.println(newUser.getName()); // Output: John
+ *         System.out.println(newUser.getAge());  // Output: 30
+ *     }
+ * }
+ * }
+ * 
* * @author zihluwang * @version 1.7.0 * @since 1.0.0 */ -@Slf4j public final class MapUtil { + private final static Logger log = LoggerFactory.getLogger(MapUtil.class); + /** * Converts an object to a map by mapping the field names to their corresponding values. * diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ObjectMapAdapter.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ObjectMapAdapter.java index 49d51b1..9dde1ff 100644 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ObjectMapAdapter.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ObjectMapAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,44 @@ import java.util.Map; /** - * Adapts an Object to a Map, making conversion between Map and Object much more safe. + * The {@link ObjectMapAdapter} interface provides methods to convert between objects and maps. + * This interface is useful for scenarios where objects need to be represented as maps for + * serialization, deserialization, or other purposes. * - * @param field type + *

Implementations of this interface should provide the logic to convert an object of type + * {@code T} to a {@link Map} and vice versa.

+ * + *

Example usage:

+ *
+ * {@code
+ * public class User {
+ *     private String name;
+ *     private int age;
+ *     
+ *     // getters and setters
+ * }
+ * 
+ * public class UserMapAdapter implements ObjectMapAdapter {
+ *     @Override
+ *     public Map toMap(User user) {
+ *         Map map = new HashMap<>();
+ *         map.put("name", user.getName());
+ *         map.put("age", user.getAge());
+ *         return map;
+ *     }
+ * 
+ *     @Override
+ *     public User fromMap(Map map) {
+ *         User user = new User();
+ *         user.setName((String) map.get("name"));
+ *         user.setAge((Integer) map.get("age"));
+ *         return user;
+ *     }
+ * }
+ * }
+ * 
+ * + * @param the type of the object to be converted * @author zihluwang * @version 1.7.0 * @since 1.4.2 @@ -40,7 +75,7 @@ public interface ObjectMapAdapter { /** * Convert a Map to an object. * - * @param map the map that will be converted to Object + * @param map the map that will be converted to an object * @return the object that is converted from the Map */ T toObject(Map map); diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/RangeUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/RangeUtil.java new file mode 100644 index 0000000..faf4925 --- /dev/null +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/RangeUtil.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2024-2025 OnixByte. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.onixbyte.devkit.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.stream.IntStream; + +/** + * {@code RangeUtil} is a utility class providing methods for generating streams of integers that + * emulate the behaviour of Python's {@code range} function. + *

+ * This class offers static methods to create ranges with various configurations. These methods + * leverage the {@link IntStream} to provide efficient and versatile integer sequences. + * + * @author zihluwang + * @see IntStream + */ +public final class RangeUtil { + + private final static Logger log = LoggerFactory.getLogger(RangeUtil.class); + + /** + * Private constructor prevent class being instantiated. + */ + private RangeUtil() { + } + + /** + * Generates a stream of integers starting from {@code 0} up to the specified {@code end} value. + *

+ * It creates a sequential, ordered {@code IntStream} that can be used for iteration or + * further processing. + *

+ * Example Usage: + *

{@code
+     * RangeUtil.range(5).forEach(System.out::println);
+     *
+     * // Output:
+     * // 0
+     * // 1
+     * // 2
+     * // 3
+     * // 4
+     * }
+ * + * @param end upper-bound of the range (exclusive) + * @return an {@code IntStream} of integers from {@code 0} (inclusive) to + * {@code end} (exclusive) + * @throws IllegalArgumentException if the given {@code end} value is less equal to 0 + * @see IntStream + */ + public static IntStream range(int end) { + if (end <= 0) { + throw new IllegalArgumentException("Parameter [end] should not less than 0, provided is " + + end); + } + return IntStream.range(0, end); + } + + /** + * Generates a stream of integers starting from the specified {@code start} value up to the + * specified {@code end} value. + *

+ * It creates a sequential, ordered {@code IntStream} that can be used for iteration or + * further processing. + *

+ * Example Usage: + *

{@code
+     * RangeUtil.range(3, 8).forEach(System.out::println);
+     *
+     * // Output:
+     * // 3
+     * // 4
+     * // 5
+     * // 6
+     * // 7
+     * }
+ * + * @param start the starting value of the range (inclusive) + * @param end upper-bound of the range (exclusive) + * @return an {@code IntStream} of integers from {@code 0} (inclusive) to + * {@code end} (exclusive) + * @throws IllegalArgumentException if the given {@code end} value is less equal to 0 + * @see IntStream + */ + public static IntStream range(int start, int end) { + if (end >= start) { + throw new IllegalStateException("Parameter [start] should less than parameter [end]."); + } + return IntStream.range(start, end); + } + + /** + * Generates a stream of integers starting from the specified {@code start} value up to the + * specified {@code end} value. + *

+ * It creates a sequential, ordered {@code IntStream} that can be used for iteration or + * further processing. + *

+ * Example Usage: + *

{@code
+     * RangeUtil.rangeClosed(3, 8).forEach(System.out::println);
+     *
+     * // Output:
+     * // 3
+     * // 4
+     * // 5
+     * // 6
+     * // 7
+     * // 8
+     * }
+ * + * @param start the starting value of the range (inclusive) + * @param end upper-bound of the range (inclusive) + * @return an {@code IntStream} of integers from {@code 0} (inclusive) to + * {@code end} (inclusive) + * @throws IllegalArgumentException if the given {@code end} value is less equal to 0 + * @see IntStream + */ + public static IntStream rangeClosed(int start, int end) { + return IntStream.rangeClosed(start, end); + } + + /** + * Generates a stream of integers starting from the specified {@code start} value, increment by + * the specified {@code step}, up to the specified {@code end} value. + *

+ * It creates a sequential, ordered {@code IntStream} that can be used for iteration or + * further processing. + *

+ * Example Usage: + *

{@code
+     * RangeUtil.range(3, 8, 2).forEach(System.out::println);
+     *
+     * // Output:
+     * // 3
+     * // 5
+     * // 7
+     * }
+ * + * @param start the starting value of the range (inclusive) + * @param end upper-bound of the range (exclusive) + * @param step the increment (or decrement) between each value + * @return an {@code IntStream} of integers from {@code 0} (inclusive) to + * {@code end} (exclusive) + * @throws IllegalArgumentException if the given {@code end} value is less equal to 0 + * @see IntStream + */ + public static IntStream range(int start, int end, int step) { + if (step == 0) { + throw new IllegalArgumentException("Step value must not be zero."); + } + if ((step > 0 && start >= end) || (step < 0 && start <= end)) { + throw new IllegalArgumentException("Range parameters are inconsistent with the step value."); + } + return IntStream.iterate(start, (n) -> n < end, (n) -> n + step); + } + +} diff --git a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java deleted file mode 100644 index 526f806..0000000 --- a/devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package is part of JDevKit, an open-source Java Development Kit that - * provides a set of convenient tools to streamline code development and - * enhance productivity. This package serves as the root package for the module - * dev-utils, which contains a collection of common utility classes commonly - * used in all Java Application development. - * - * @author Zihlu Wang - * @since 1.0.0 - */ -package com.onixbyte.devkit.utils; \ No newline at end of file diff --git a/devkit-utils/src/main/resources/logback.xml b/devkit-utils/src/main/resources/logback.xml index 6d26440..56cd5b7 100644 --- a/devkit-utils/src/main/resources/logback.xml +++ b/devkit-utils/src/main/resources/logback.xml @@ -1,6 +1,6 @@ - - + + diff --git a/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestAesUtil.java b/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestAesUtil.java index 4510a49..17c6c92 100644 --- a/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestAesUtil.java +++ b/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestAesUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestBase64Util.java b/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestBase64Util.java index 573c2f9..cf5040c 100644 --- a/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestBase64Util.java +++ b/devkit-utils/src/test/java/com/onixbyte/devkit/utils/TestBase64Util.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/gradle.properties b/gradle.properties index 92149db..1e3e3ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # -# Copyright (C) 2024-2024 OnixByte. +# Copyright (C) 2024-2025 OnixByte. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,12 +19,11 @@ jacksonVersion=2.18.0 javaJwtVersion=4.4.0 junitVersion=5.11.2 logbackVersion=1.5.10 -lombokVersion=1.18.34 slf4jVersion=2.0.16 springVersion=6.1.13 springBootVersion=3.3.4 -artefactVersion=1.7.0 +artefactVersion=1.8.0 projectUrl=https://onixbyte.com/JDevKit projectGithubUrl=https://github.com/OnixByte/JDevKit licenseName=The Apache License, Version 2.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0310101..caa411c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ # -# Copyright (C) 2024-2024 OnixByte. +# Copyright (C) 2024-2025 OnixByte. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/guid/build.gradle.kts b/guid/build.gradle.kts index c92aa23..ccae9fb 100644 --- a/guid/build.gradle.kts +++ b/guid/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/guid/src/main/java/com/onixbyte/guid/GuidCreator.java b/guid/src/main/java/com/onixbyte/guid/GuidCreator.java index 078b031..266c85f 100644 --- a/guid/src/main/java/com/onixbyte/guid/GuidCreator.java +++ b/guid/src/main/java/com/onixbyte/guid/GuidCreator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,31 @@ package com.onixbyte.guid; /** - * The {@code GuidCreator} is a generic interface for generating globally unique - * identifiers (GUIDs) of a specific type. + * The {@code GuidCreator} is a generic interface for generating globally unique identifiers (GUIDs) + * of a specific type. *

* The type of ID is determined by the class implementing this interface. + *

+ * + *

Example usage:

+ *
{@code
+ * public class StringGuidCreator implements GuidCreator {
+ *     private final AtomicLong counter = new AtomicLong();
+ *
+ *     @Override
+ *     public String nextId() {
+ *         return UUID.randomUUID().toString() + "-" + counter.incrementAndGet();
+ *     }
+ * }
+ *
+ * public class Example {
+ *     public static void main(String[] args) {
+ *         GuidCreator guidCreator = new StringGuidCreator();
+ *         String guid = guidCreator.nextId();
+ *         System.out.println("Generated GUID: " + guid);
+ *     }
+ * }
+ * }
* * @param this represents the type of the Global Unique Identifier * @author Zihlu Wang @@ -32,9 +53,6 @@ public interface GuidCreator { /** * Generates and returns the next globally unique ID. - *

- * The exact implementation of how the globally unique ID is generated and - * returned will depend on the class implementing this method. * * @return the next globally unique ID */ diff --git a/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java b/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java index 7144723..611e5fb 100644 --- a/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java +++ b/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +18,12 @@ package com.onixbyte.guid.exceptions; /** - * The {@code TimingException} class represents an exception that is thrown - * when there is an error related to time sequence. + * The {@code TimingException} class represents an exception that is thrown when there is an error + * related to time sequence. *

- * Instances of TimingException can be created with or without a message and a - * cause. The message provides a description of the exception, while the cause - * represents the underlying cause of the exception and provides additional - * information about the error. + * Instances of TimingException can be created with or without a message and a cause. The message + * provides a description of the exception, while the cause represents the underlying cause of the + * exception and provides additional information about the error. * * @author Zihlu Wang * @since 1.0.0 @@ -32,15 +31,14 @@ public class TimingException extends RuntimeException { /** - * A custom exception that is thrown when there is an issue with timing or - * scheduling. + * A custom exception that is thrown when there is an issue with timing or scheduling. */ public TimingException() { } /** - * A custom exception that is thrown when there is an issue with timing or - * scheduling with customised error message. + * A custom exception that is thrown when there is an issue with timing or scheduling with + * customised error message. * * @param message customised message */ @@ -49,8 +47,8 @@ public TimingException(String message) { } /** - * A custom exception that is thrown when there is an issue with timing or - * scheduling with customised error message. + * A custom exception that is thrown when there is an issue with timing or scheduling with + * customised error message. * * @param message customised message * @param cause the cause of this exception @@ -60,8 +58,8 @@ public TimingException(String message, Throwable cause) { } /** - * A custom exception that is thrown when there is an issue with timing or - * scheduling with customised error message. + * A custom exception that is thrown when there is an issue with timing or scheduling with + * customised error message. * * @param cause the cause of this exception */ diff --git a/guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java b/guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java deleted file mode 100644 index 30736c6..0000000 --- a/guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package contains the custom exception classes related to GUID - * generation. These exceptions are thrown when there are issues or errors - * during the generation or processing of global unique identifiers (GUIDs). - *

- * The main exception class in this package is {@link - * com.onixbyte.guid.exceptions.TimingException}, which is a runtime - * exception and serves as the base exception for all other custom exceptions - * related to GUID generation. - *

- * Custom exceptions in this package provide specific information about the - * type of error that occurred during GUID generation, making it easier for - * developers to handle and respond to different scenarios when dealing with - * GUIDs. They are designed to enhance the robustness and reliability of the - * GUID generation process by providing clear and meaningful error messages to - * the developers. - *

- * Developers using the GUID generation module should be aware of the possible - * exceptions that can be thrown and handle them appropriately to ensure smooth - * operation and error handling in their applications. - * - * @since 1.0.0 - */ -package com.onixbyte.guid.exceptions; \ No newline at end of file diff --git a/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java b/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java index 2c40a5e..7fab071 100644 --- a/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java +++ b/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,15 +19,16 @@ import com.onixbyte.guid.GuidCreator; import com.onixbyte.guid.exceptions.TimingException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.time.LocalDateTime; import java.time.ZoneId; /** - * The {@code SnowflakeGuidCreator} generates unique identifiers using the - * Snowflake algorithm, which combines a timestamp, worker ID, and data centre - * ID to create 64-bit long integers. The bit distribution for the generated - * IDs is as follows: + * The {@code SnowflakeGuidCreator} generates unique identifiers using the Snowflake algorithm, + * which combines a timestamp, worker ID, and data centre ID to create 64-bit long integers. The bit + * distribution for the generated IDs is as follows: *

    *
  • 1 bit for sign
  • *
  • 41 bits for timestamp (in milliseconds)
  • @@ -36,11 +37,10 @@ *
  • 12 bits for sequence number (per millisecond)
  • *
*

- * When initializing a {@link SnowflakeGuidCreator}, you must provide the - * worker ID and data centre ID, ensuring they are within the valid range - * defined by the bit size. The generator maintains an internal sequence number - * that increments for IDs generated within the same millisecond. If the system - * clock moves backward, an exception is thrown to prevent generating IDs with + * When initializing a {@link SnowflakeGuidCreator}, you must provide the worker ID and data centre + * ID, ensuring they are within the valid range defined by the bit size. The generator maintains an + * internal sequence number that increments for IDs generated within the same millisecond. If the + * system clock moves backward, an exception is thrown to prevent generating IDs with * repeated timestamps. * * @author Zihlu Wang @@ -49,9 +49,11 @@ */ public final class SnowflakeGuidCreator implements GuidCreator { + private final static Logger log = LoggerFactory.getLogger(SnowflakeGuidCreator.class); + /** - * Constructs a SnowflakeGuidGenerator with the default start epoch and - * custom worker ID, data centre ID. + * Constructs a SnowflakeGuidGenerator with the default start epoch and custom worker ID, data + * centre ID. * * @param dataCentreId the data centre ID (between 0 and 31) * @param workerId the worker ID (between 0 and 31) @@ -61,16 +63,13 @@ public SnowflakeGuidCreator(long dataCentreId, long workerId) { } /** - * Constructs a SnowflakeGuidGenerator with a custom epoch, worker ID, and - * data centre ID. + * Constructs a SnowflakeGuidGenerator with a custom epoch, worker ID, and data centre ID. * * @param dataCentreId the data centre ID (between 0 and 31) * @param workerId the worker ID (between 0 and 31) - * @param startEpoch the custom epoch timestamp (in milliseconds) to - * start generating IDs from - * @throws IllegalArgumentException if the start epoch is greater than the - * current timestamp, or if the worker ID - * or data centre ID is out of range + * @param startEpoch the custom epoch timestamp (in milliseconds) to start generating IDs from + * @throws IllegalArgumentException if the start epoch is greater than the current timestamp, + * or if the worker ID or data centre ID is out of range */ public SnowflakeGuidCreator(long dataCentreId, long workerId, long startEpoch) { if (startEpoch > currentTimestamp()) { @@ -98,37 +97,37 @@ public SnowflakeGuidCreator(long dataCentreId, long workerId, long startEpoch) { * Generates the next unique ID. * * @return the generated unique ID - * @throws TimingException if the system clock moves backwards, - * indicating an invalid sequence of timestamps. + * @throws TimingException if the system clock moves backwards, indicating an invalid sequence + * of timestamps. */ @Override public synchronized Long nextId() { var timestamp = currentTimestamp(); - // If the current time is less than the timestamp of the last ID generation, it means that the system clock - // has been set back and an exception should be thrown. + // if the current time is less than the timestamp of the last ID generation, it means that + // the system clock has been set back and an exception should be thrown if (timestamp < lastTimestamp) { throw new TimingException("Clock moved backwards. Refusing to generate id for %d milliseconds" .formatted(lastTimestamp - timestamp)); } - // If generated at the same time, perform intra-millisecond sequences + // if generated at the same time, perform intra-millisecond sequences long sequenceBits = 12L; if (lastTimestamp == timestamp) { long sequenceMask = ~(-1L << sequenceBits); sequence = (sequence + 1) & sequenceMask; - // Sequence overflow in milliseconds + // sequence overflow in milliseconds if (sequence == 0) { - // Block to the next millisecond, get a new timestamp + // block to the next millisecond, get a new timestamp timestamp = awaitToNextMillis(lastTimestamp); } } - // Timestamp change, sequence reset in milliseconds + // timestamp change, sequence reset in milliseconds else { sequence = 0L; } - // Timestamp of last ID generation + // timestamp of last ID generation lastTimestamp = timestamp; // shifted and put together by or operations to form a 64-bit ID diff --git a/guid/src/main/java/com/onixbyte/guid/package-info.java b/guid/src/main/java/com/onixbyte/guid/package-info.java deleted file mode 100644 index 9dc81bc..0000000 --- a/guid/src/main/java/com/onixbyte/guid/package-info.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The package provides a set of tools for generating globally unique - * identifiers (GUIDs). - *

- * The goal of this library is to provide an efficient, reliable way to - * generate globally unique identifiers without requiring any specific - * environment or configuration. - *

- * Key features include: - *

    - *
  • Efficient generation of globally unique identifiers
  • - *
  • High performance and quick response
  • - *
  • Easy to integrate
  • - *
- * - * @since 1.0.0 - */ -package com.onixbyte.guid; \ No newline at end of file diff --git a/guid/src/main/resources/logback.xml b/guid/src/main/resources/logback.xml index 0998203..7beaa9d 100644 --- a/guid/src/main/resources/logback.xml +++ b/guid/src/main/resources/logback.xml @@ -1,6 +1,6 @@ - - + + diff --git a/num4j/src/main/java/com/onixbyte/nums/ChainedCalcUtil.java b/num4j/src/main/java/com/onixbyte/nums/ChainedCalcUtil.java index 27242c9..62a7f61 100644 --- a/num4j/src/main/java/com/onixbyte/nums/ChainedCalcUtil.java +++ b/num4j/src/main/java/com/onixbyte/nums/ChainedCalcUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,8 @@ package com.onixbyte.nums; -import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.math.RoundingMode; @@ -90,9 +91,10 @@ * @see BigDecimal * @since 1.0.0 */ -@Getter public final class ChainedCalcUtil { + private final static Logger log = LoggerFactory.getLogger(ChainedCalcUtil.class); + /** * Creates a {@code ChainedCalcUtil} instance with the specified initial value. * @@ -235,6 +237,15 @@ public BigDecimal getValue(int scale) { return value.setScale(scale, RoundingMode.HALF_UP); } + /** + * Returns the current value as a {@link BigDecimal}. + * + * @return the current value as a {@link BigDecimal} + */ + public BigDecimal getValue() { + return value; + } + /** * Returns the current value as a {@link Double}. * @@ -297,7 +308,7 @@ private ChainedCalcUtil operator(BiFunction Object other, Integer beforeOperateScale) { return baseOperator((otherValue) -> - operator.apply(this.value, otherValue), + operator.apply(this.value, otherValue), other, beforeOperateScale); } diff --git a/num4j/src/main/java/com/onixbyte/nums/PercentileCalculator.java b/num4j/src/main/java/com/onixbyte/nums/PercentileCalculator.java index 6ae9378..e351e5a 100644 --- a/num4j/src/main/java/com/onixbyte/nums/PercentileCalculator.java +++ b/num4j/src/main/java/com/onixbyte/nums/PercentileCalculator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.onixbyte.nums; import com.onixbyte.nums.model.QuartileBounds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; /** - * A utility class that provides methods for calculating percentiles and interquartile range (IQR) bounds - * for a dataset. + * A utility class that provides methods for calculating percentiles and interquartile range (IQR) + * bounds for a dataset. *

* This class contains static methods to: *

    @@ -48,6 +51,8 @@ */ public final class PercentileCalculator { + private final static Logger log = LoggerFactory.getLogger(PercentileCalculator.class); + /** * Private constructor prevents from being initialised. */ @@ -57,12 +62,13 @@ private PercentileCalculator() { /** * Calculates the specified percentile from a list of values. *

    - * This method takes a list of double values and calculates the given percentile using linear interpolation between - * the two closest ranks. The list is first sorted in ascending order, and the specified percentile is - * then calculated. + * This method takes a list of double values and calculates the given percentile using linear + * interpolation between the two closest ranks. The list is first sorted in ascending order, + * and the specified percentile is then calculated. * * @param values a list of {@code Double} values from which the percentile is calculated. - * @param percentile a {@code Double} representing the percentile to be calculated (e.g., 50.0 for the median) + * @param percentile a {@code Double} representing the percentile to be calculated (e.g., 50.0 + * for the median) * @return a {@code Double} value representing the calculated percentile */ public static Double calculatePercentile(List values, Double percentile) { diff --git a/num4j/src/main/java/com/onixbyte/nums/model/QuartileBounds.java b/num4j/src/main/java/com/onixbyte/nums/model/QuartileBounds.java index 3233e61..5daf4f8 100644 --- a/num4j/src/main/java/com/onixbyte/nums/model/QuartileBounds.java +++ b/num4j/src/main/java/com/onixbyte/nums/model/QuartileBounds.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,9 @@ /** * A record representing the quartile bounds of a dataset. *

    - * This class encapsulates the lower and upper bounds of a dataset, which are typically used for detecting outliers in - * the data. The bounds are calculated based on the interquartile range (IQR) of the dataset. Values below the lower - * bound or above the upper bound may be considered outliers. + * This class encapsulates the lower and upper bounds of a dataset, which are typically used for + * detecting outliers in the data. The bounds are calculated based on the interquartile range (IQR) + * of the dataset. Values below the lower bound or above the upper bound may be considered outliers. *

    * Quartile bounds consist of: *

      @@ -52,8 +52,8 @@ public record QuartileBounds( /** * Creates a new {@link Builder} instance for building a {@code QuartileBounds} object. *

      - * The {@link Builder} pattern is used to construct the {@code QuartileBounds} object with optional values for the - * upper and lower bounds. + * The {@link Builder} pattern is used to construct the {@code QuartileBounds} object with + * optional values for the upper and lower bounds. *

      * * @return a new instance of the {@link Builder} class @@ -65,9 +65,10 @@ public static Builder builder() { /** * A builder class for constructing instances of the {@code QuartileBounds} record. *

      - * The {@link Builder} pattern allows for the step-by-step construction of a {@code QuartileBounds} object, - * providing a flexible way to set values for the lower and upper bounds. Once the builder has the required values, - * the {@link #build()} method creates and returns a new {@code QuartileBounds} object. + * The {@link Builder} pattern allows for the step-by-step construction of a + * {@code QuartileBounds} object, providing a flexible way to set values for the lower and + * upper bounds. Once the builder has the required values, the {@link #build()} method creates + * and returns a new {@code QuartileBounds} object. *

      *

      * Example usage: @@ -114,7 +115,8 @@ public Builder lowerBound(Double lowerBound) { } /** - * Builds and returns a new {@code QuartileBounds} instance with the specified upper and lower bounds. + * Builds and returns a new {@code QuartileBounds} instance with the specified upper and + * lower bounds. * * @return a new {@code QuartileBounds} object containing the specified bounds */ diff --git a/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java b/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java index 25354a2..8ed227a 100644 --- a/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java +++ b/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,8 @@ package com.onixbyte.propertyguard.autoconfiguration; import com.onixbyte.devkit.utils.AesUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.boot.env.OriginTrackedMapPropertySource; @@ -29,39 +31,34 @@ import java.util.Optional; /** - * {@code PropertyGuard} is a utility class designed for encrypting - * configuration properties in Spring Boot applications. + * {@code PropertyGuard} is a utility class designed for encrypting configuration properties in + * Spring Boot applications. *

      - * Spring Boot applications often need to store sensitive configuration details - * such as database passwords, API keys, etc. To ensure that these sensitive - * pieces of information are not exposed to the public, developers can utilize - * the {@code PropertyGuard} class to encrypt and store them within - * configuration files. + * Spring Boot applications often need to store sensitive configuration details such as database + * passwords, API keys, etc. To ensure that these sensitive pieces of information are not exposed + * to the public, developers can utilize the {@code PropertyGuard} class to encrypt and store them + * within configuration files. *

      * Usage - * You need a 16-char long secret for encrypting a configuration property. You - * can get this secret on your own, or use the helper utility class by the - * following code: + * You need a 16-char long secret for encrypting a configuration property. You can get this secret + * on your own, or use the helper utility class by the following code: *

      {@code
      - * var secret = AesUtil.generateRandomSecret(); // Let's presume the result is
      - *                                              // "3856faef0d2d4f33"
      + * var secret = AesUtil.generateRandomSecret(); // Let's presume the result is "3856faef0d2d4f33"
        * }
      *

      - * Then, in {@code application.yml} or {@code application.properties}, change - * the original value from plain text to encrypted value with the prefix - * "pg:". - *

      - *     # original
      - *     app.example-properties=Sample Value
      + * Then, in {@code application.yml} or {@code application.properties}, change the original value
      + * from plain text to encrypted value with the prefix "pg:".
      + * 
      {@code
      + * # original
      + * app.example-properties=Sample Value
        *
      - *     # encrypted with key 3856faef0d2d4f33
      - *     app.example-properties=pg:t4YBfv8M9ZmTzWgTi2gJqg==
      - * 
      - * After that, before running, you need to add the command line arguments - * "pg.key" as the following codes: {@code --pg.key=}. + * # encrypted with key 3856faef0d2d4f33 + * app.example-properties=pg:t4YBfv8M9ZmTzWgTi2gJqg== + * }
      + * After that, before running, you need to add the command line arguments "pg.key" as the following + * codes: {@code --pg.key=}. *

      - * This class is extracted from MyBatis-Plus. + * This class is extracted from MyBatis-Plus. * * @author hubin@baomidou * @version 1.1.0 @@ -70,6 +67,8 @@ */ public class PropertyGuard implements EnvironmentPostProcessor { + private final static Logger log = LoggerFactory.getLogger(PropertyGuard.class); + /** * Create a {@link PropertyGuard} instance. */ diff --git a/settings.gradle.kts b/settings.gradle.kts index 90d19a2..1a7eb27 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java index 8e6b308..51e0267 100644 --- a/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java +++ b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,7 +38,8 @@ import com.onixbyte.simplejwt.exceptions.IllegalKeyPairException; import com.onixbyte.simplejwt.exceptions.IllegalSecretException; import com.onixbyte.simplejwt.exceptions.UnsupportedAlgorithmException; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.InvocationTargetException; import java.security.interfaces.ECPrivateKey; @@ -98,9 +99,10 @@ * @see JWTCreator.Builder * @since 1.0.0 */ -@Slf4j public class AuthzeroTokenResolver implements TokenResolver { + private final static Logger log = LoggerFactory.getLogger(AuthzeroTokenResolver.class); + /** * Create a builder of {@link AuthzeroTokenResolver}. * diff --git a/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java deleted file mode 100644 index d9832ff..0000000 --- a/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package contains classes related to the integration of the {@code com.auth0:java-jwt} - * library in the Simple JWT project. {@code com.auth0:java-jwt} is a powerful and widely-used - * identity as a Service (IDaaS) platform that provides secure authentication and authorisation - * solutions for web and mobile applications. The classes in this package provide the necessary - * functionality to handle JSON Web Tokens (JWTs) using the {@code com.auth0:java-jwt} library. - *

      - * The main class in this package is the {@link - * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver}, which implements the - * {@link com.onixbyte.simplejwt.TokenResolver} interface and uses the {@code com.auth0:java-jwt} - * library to handle JWT operations. It provides the functionality to create, validate, and extract - * JWTs using the {@code com.auth0:java-jwt} library. Developers can use this class as the main - * token resolver in the Simple JWT project when integrating {@code com.auth0:java-jwt} as the - * JWT management library. - *

      - * The {@link com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} relies on the - * {@code com.auth0:java-jwt} library to handle the underlying JWT operations, including token - * creation, validation, and extraction. It utilizes the {@code com.auth0:java-jwt} - * {@link com.auth0.jwt.algorithms.Algorithm} class to define and use different algorithms for - * JWT signing and verification. - *

      - * Developers using the {@code com.auth0:java-jwt} integration should be familiar with the concepts - * and usage of the {@code com.auth0:java-jwt} library and follow the official - * {@code com.auth0:java-jwt} documentation for best practices and security considerations. - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.authzero; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java index 0734540..831bc88 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,8 @@ package com.onixbyte.simplejwt; import com.onixbyte.simplejwt.exceptions.WeakSecretException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Random; @@ -32,6 +34,8 @@ */ public final class SecretCreator { + private final static Logger log = LoggerFactory.getLogger(SecretCreator.class); + /** * Generates a secure secret with the specified length and character sets. * diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java index cecc74a..1234c6c 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ package com.onixbyte.simplejwt; -import java.util.Map; - /** * {@code TokenPayload} interface is used to mark a data class as suitable * for being used as the payload in a JSON Web Token (JWT). Any class @@ -44,7 +42,4 @@ * @since 1.0.0 */ public interface TokenPayload { - - // Marker interface for JWT payload data classes - } diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java index c0d51f5..c2ea124 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java index 2bda34a..0253755 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java index d0823c9..ffb5e2f 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java deleted file mode 100644 index 16bf17d..0000000 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package contains annotation classes that are used to prevent annotated - * properties from being automatically injected into the JSON Web Token (JWT) - * payload during token generation. These annotations can be applied to - * properties of a data class to exclude them from being included as part - * of the JWT payload. - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.annotations; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java index c531d56..9dc480a 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java index a0dc86b..21d34c2 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ package com.onixbyte.simplejwt.constants; -import lombok.Getter; - import java.util.List; /** @@ -45,7 +43,6 @@ * @version 1.1.0 * @since 1.0.0 */ -@Getter public enum TokenAlgorithm { /** diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java index f86edc5..187b2e9 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,14 +17,11 @@ package com.onixbyte.simplejwt.constants; -import lombok.Getter; - /** * The base data types used to process enum data. * * @author Zihlu Wang */ -@Getter public enum TokenDataType { /** @@ -70,4 +67,12 @@ public enum TokenDataType { this.mappedClass = mappedClass; } + /** + * Return the target mapped class. + * + * @return mapped class + */ + public Class getMappedClass() { + return mappedClass; + } } diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java deleted file mode 100644 index b1f1aed..0000000 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package contains constant values related to JSON Web Token (JWT) - * processing. These constants define various aspects of JWT, such as the - * algorithms being used for token signing and verification, and other - * configuration parameters. - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.constants; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalKeyPairException.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalKeyPairException.java index 0b725dd..55959ce 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalKeyPairException.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalKeyPairException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalSecretException.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalSecretException.java index 6722ebd..3ade2f2 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalSecretException.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/IllegalSecretException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java index 940d3ae..c626e40 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/WeakSecretException.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/WeakSecretException.java index e1f678e..a7a57e7 100644 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/WeakSecretException.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/WeakSecretException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/package-info.java deleted file mode 100644 index 8bfa97b..0000000 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/package-info.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The {@code cn.org.codecrafters.simplejwt.exceptions} package contains - * custom exception classes related to the - * {@code cn.org.codecrafters:simple-jwt-facade} library. These exceptions are - * thrown when there are issues or errors during the generation , validation, - * or processing of JSON Web Tokens (JWTs) in Java applications. - *

      - * Custom exception classes in this package are designed to enhance the - * robustness and reliability of the JWT handling process by providing clear - * and meaningful error messages to the developers. They help developers - * identify and troubleshoot issues related to JWT generation, validation, or - * extraction and ensure smooth operation and error handling in - * their applications. - *

      - * Developers using the {@code cn.org.codecrafters:simple-jwt-facade} library - * should be aware of the possible exceptions that can be thrown and handle - * them appropriately to ensure secure and reliable JWT handling in their - * Java applications. - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.exceptions; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/package-info.java deleted file mode 100644 index 2d203b3..0000000 --- a/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/package-info.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The {@code cn.org.codecrafters.simplejwt} package is the core package of the - * Simple JWT project, which provides a lightweight and easy-to-use - * library for working with JSON Web Tokens (JWTs) in Java applications. JWT is - * a widely-used standard for representing claims between two parties, - * typically used to secure web and mobile applications. This library aims to - * simplify the JWT handling process and provide convenient abstractions for - * JWT generation, validation, and extraction. - *

      - * The Simple JWT library is designed to be flexible and customisable, - * allowing developers to use different algorithms, token resolvers, and token - * payload classes based on their specific application requirements. It aims to - * simplify the JWT handling process while maintaining security and best - * practices for working with JWTs. - *

      - * Developers should refer to the official documentation and examples for the - * Simple JWT project to understand how to use the library effectively - * and securely in their Java applications. - * - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt; \ No newline at end of file diff --git a/simple-jwt-spring-boot-starter/build.gradle.kts b/simple-jwt-spring-boot-starter/build.gradle.kts index 02fa091..753c3e1 100644 --- a/simple-jwt-spring-boot-starter/build.gradle.kts +++ b/simple-jwt-spring-boot-starter/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/AuthzeroTokenResolverAutoConfiguration.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/AuthzeroTokenResolverAutoConfiguration.java index df01a0d..dd30bde 100644 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/AuthzeroTokenResolverAutoConfiguration.java +++ b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/AuthzeroTokenResolverAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,8 @@ import com.auth0.jwt.interfaces.DecodedJWT; import com.fasterxml.jackson.databind.ObjectMapper; import com.onixbyte.simplejwt.constants.TokenAlgorithm; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; @@ -55,7 +56,6 @@ * @version 1.6.0 * @since 1.0.0 */ -@Slf4j @AutoConfiguration @EnableConfigurationProperties(value = {SimpleJwtProperties.class}) @ConditionalOnClass({DecodedJWT.class, AuthzeroTokenResolver.class}) @@ -64,6 +64,8 @@ @AutoConfigureAfter(value = GuidAutoConfiguration.class) public class AuthzeroTokenResolverAutoConfiguration { + private final static Logger log = LoggerFactory.getLogger(AuthzeroTokenResolverAutoConfiguration.class); + /** * Constructs a new {@code SimpleJwtAutoConfiguration} instance with the * provided SimpleJwtProperties. diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/GuidAutoConfiguration.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/GuidAutoConfiguration.java index 9dfa938..149aabf 100644 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/GuidAutoConfiguration.java +++ b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/GuidAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,8 @@ import com.onixbyte.guid.GuidCreator; import com.onixbyte.simplejwt.autoconfiguration.conditions.GuidCreatorCondition; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; @@ -33,10 +34,11 @@ * @version 1.1.0 * @since 1.0.0 */ -@Slf4j @AutoConfiguration public class GuidAutoConfiguration { + private final static Logger log = LoggerFactory.getLogger(GuidAutoConfiguration.class); + /** * Default constructor. */ diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/conditions/GuidCreatorCondition.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/conditions/GuidCreatorCondition.java index 3c25ebc..ff0410a 100644 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/conditions/GuidCreatorCondition.java +++ b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/conditions/GuidCreatorCondition.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,8 @@ package com.onixbyte.simplejwt.autoconfiguration.conditions; import com.onixbyte.guid.GuidCreator; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -32,9 +33,10 @@ * @version 1.1.0 * @since 1.0.0 */ -@Slf4j public class GuidCreatorCondition implements Condition { + private final static Logger log = LoggerFactory.getLogger(GuidCreatorCondition.class); + /** * Default constructor. */ diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/package-info.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/package-info.java deleted file mode 100644 index 603437b..0000000 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/package-info.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - *

      - * The classes in this package are responsible for automatically configuring - * the Simple JWT library when it is used in a Spring Boot application. They - * provide default settings and configurations to ensure that the library works - * smoothly and seamlessly without requiring developers to manually configure - * it. - * - * - *

      - * Developers using the Simple JWT library with Spring Boot do not need to - * explicitly configure the library, as the auto-configuration classes take - * care of setting up the necessary components and configurations - * automatically. However, developers still have the flexibility to customize - * the behavior of the library by providing their own configurations and - * properties. - * - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.autoconfiguration; \ No newline at end of file diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/SimpleJwtProperties.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/SimpleJwtProperties.java index fb92243..826d108 100644 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/SimpleJwtProperties.java +++ b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/SimpleJwtProperties.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2024 OnixByte. + * Copyright (C) 2024-2025 OnixByte. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import com.onixbyte.simplejwt.SecretCreator; import com.onixbyte.simplejwt.autoconfiguration.AuthzeroTokenResolverAutoConfiguration; import com.onixbyte.simplejwt.constants.TokenAlgorithm; -import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -42,7 +41,6 @@ * @version 1.1.0 * @since 1.0.0 */ -@Data @ConfigurationProperties(prefix = "onixbyte.simple-jwt") public class SimpleJwtProperties { @@ -79,5 +77,94 @@ public SimpleJwtProperties() { */ private String publicKey; + /** + * Algorithm getter. + * + * @return algorithm + */ + public TokenAlgorithm getAlgorithm() { + return algorithm; + } + + /** + * Algorithm setter. + * + * @param algorithm the algorithm + */ + public void setAlgorithm(TokenAlgorithm algorithm) { + this.algorithm = algorithm; + } + + /** + * Issuer getter. + * + * @return issuer + */ + public String getIssuer() { + return issuer; + } + + /** + * Issuer setter. + * + * @param issuer the issuer + */ + public void setIssuer(String issuer) { + this.issuer = issuer; + } + + /** + * Secret setter. + * + * @return secret + */ + public String getSecret() { + return secret; + } + + /** + * Secret setter. + * + * @param secret the secret + */ + public void setSecret(String secret) { + this.secret = secret; + } + + /** + * Private key getter. + * + * @return private key + */ + public String getPrivateKey() { + return privateKey; + } + + /** + * Private key setter. + * + * @param privateKey private key + */ + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } + + /** + * Public key getter. + * + * @return public key + */ + public String getPublicKey() { + return publicKey; + } + + /** + * Public key setter. + * + * @param publicKey public key + */ + public void setPublicKey(String publicKey) { + this.publicKey = publicKey; + } } diff --git a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/package-info.java b/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/package-info.java deleted file mode 100644 index be3ed46..0000000 --- a/simple-jwt-spring-boot-starter/src/main/java/com/onixbyte/simplejwt/autoconfiguration/properties/package-info.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024-2024 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The "cn.org.codecrafters.simplejwt.autoconfiguration.properties" package - * contains configuration properties classes used for Simple JWT library - * autoconfiguration. These classes define the properties that can be - * configured in the application's properties file (e.g., - * application.properties) to customize the behavior and settings of the Simple - * JWT library. - *

      - * Developers can customize the JWT algorithm, issuer, and secret by setting - * the corresponding properties in the application's properties file with the - * prefix "code-crafters.simple-jwt". The SimpleJwtAutoConfiguration class - * reads these properties and uses them to create the {@link - * com.onixbyte.simplejwt.TokenResolver} bean with the desired - * configuration. - * - * @since 1.0.0 - */ -package com.onixbyte.simplejwt.autoconfiguration.properties; \ No newline at end of file diff --git a/simple-jwt-spring-boot-starter/src/main/resources/logback.xml b/simple-jwt-spring-boot-starter/src/main/resources/logback.xml index 6d26440..fd31eac 100644 --- a/simple-jwt-spring-boot-starter/src/main/resources/logback.xml +++ b/simple-jwt-spring-boot-starter/src/main/resources/logback.xml @@ -1,6 +1,6 @@