Guava লাইব্রেরিতে বিভিন্ন validation সম্পর্কিত সরঞ্জাম পাওয়া যায়, কিন্তু কখনো কখনো ডেভেলপারদের কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করার প্রয়োজন পড়ে। Guava লাইব্রেরি Preconditions এবং Validation এর মতো টুল সরবরাহ করে, যা দিয়ে আপনি সহজেই কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
কাস্টম ভ্যালিডেটর তৈরি করার মাধ্যমে আপনি নিজস্ব শর্ত বা নিয়ম অনুসারে ইনপুট ভ্যালিডেশন করতে পারেন, যা গ্যাস্ট বা প্লাগঅ্যাবল হয়ে কাজ করবে।
কাস্টম ভ্যালিডেটর তৈরি করার উপায়
Guava লাইব্রেরি Preconditions ক্লাস এবং Java Bean Validation API (যেমন @NotNull, @Size, ইত্যাদি) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করা যেতে পারে। আমরা এখানে Preconditions এর মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করার একটি উদাহরণ দেখব।
Preconditions ক্লাসে কাস্টম ভ্যালিডেটর
Guava লাইব্রেরির Preconditions ক্লাসটি সাধারণত প্রি-কন্ডিশন চেক করার জন্য ব্যবহৃত হয়, কিন্তু এটি কাস্টম কন্ডিশন চেকের জন্যও ব্যবহার করা যেতে পারে। আপনার প্রয়োজন অনুযায়ী আপনি শর্ত ঠিক করতে পারেন এবং তাতে যদি কিছু ভুল হয়, তবে IllegalArgumentException বা অন্যান্য ত্রুটি ছোড়া যায়।
কাস্টম ভ্যালিডেটর উদাহরণ
এখানে একটি কাস্টম ভ্যালিডেটর তৈরি করা হয়েছে যা সুনির্দিষ্ট শর্তে ইনপুট ভ্যালু যাচাই করে এবং ত্রুটি ছোড়ে:
import com.google.common.base.Preconditions;
public class CustomValidatorExample {
// Custom validator to check if a string is not empty and has a minimum length
public static void validateUsername(String username) {
// Validate that the username is not null or empty
Preconditions.checkArgument(username != null && !username.isEmpty(), "Username cannot be null or empty.");
// Validate that the username has at least 5 characters
Preconditions.checkArgument(username.length() >= 5, "Username must be at least 5 characters long.");
}
public static void main(String[] args) {
try {
// Validate a username
validateUsername("john");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
try {
// Validate another username
validateUsername("johndoe");
System.out.println("Username is valid.");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
আউটপুট
Error: Username must be at least 5 characters long.
Username is valid.
কাস্টম ভ্যালিডেটর তৈরির অন্যান্য উদাহরণ
কাস্টম ইমেইল ভ্যালিডেটর
import com.google.common.base.Preconditions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
// Validate email using regular expression
public static void validateEmail(String email) {
// Validate if email is not null or empty
Preconditions.checkArgument(email != null && !email.isEmpty(), "Email cannot be null or empty.");
// Regular expression to validate email format
String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
Pattern pattern = Pattern.compile(emailRegex);
Matcher matcher = pattern.matcher(email);
// Check if email matches the regular expression
Preconditions.checkArgument(matcher.matches(), "Invalid email format.");
}
public static void main(String[] args) {
try {
validateEmail("invalid-email");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
try {
validateEmail("valid@example.com");
System.out.println("Email is valid.");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
আউটপুট
Error: Invalid email format.
Email is valid.
Guava-এর Validator তৈরি করার অন্যান্য উপায়
1. Custom Annotations ব্যবহার করে (Bean Validation)
Guava লাইব্রেরির সাথে আপনি Java Bean Validation API (JSR 303) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করতে পারেন, যেখানে আপনি @Constraint অ্যানোটেশন এবং ConstraintValidator ব্যবহার করতে পারেন।
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// Custom annotation
@Constraint(validatedBy = AgeValidator.class)
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidAge {
String message() default "Invalid age";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
// Validator implementation
class AgeValidator implements ConstraintValidator<ValidAge, Integer> {
@Override
public void initialize(ValidAge constraintAnnotation) {}
@Override
public boolean isValid(Integer age, ConstraintValidatorContext context) {
// Check if age is greater than or equal to 18
return age != null && age >= 18;
}
}
// Using custom annotation
public class CustomValidatorExample {
@ValidAge
private Integer age;
public static void main(String[] args) {
CustomValidatorExample example = new CustomValidatorExample();
example.age = 16;
// Perform validation (this needs a validation framework like Hibernate Validator)
}
}
2. Custom Exception Handling
কাস্টম ভ্যালিডেটর ব্যবহার করার সময় আপনি নিজস্ব ত্রুটি বার্তা প্রদান করতে পারেন, যা ব্যবহারকারীদের জন্য আরও স্পষ্ট এবং অর্থবোধক হবে।
Guava কাস্টম ভ্যালিডেটরের সুবিধা
- সহজ এবং কার্যকরী: Guava এর Preconditions ক্লাস দিয়ে খুব সহজে কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করা যায়।
- ভাল ত্রুটি বার্তা: কাস্টম ত্রুটি বার্তা সরবরাহ করে আপনি ইনপুট যাচাইয়ের সময় ব্যবহারকারীদের পরিষ্কার বার্তা দিতে পারেন।
- নির্ভরযোগ্য এবং রক্ষণাবেক্ষণযোগ্য: Guava লাইব্রেরির কাস্টম ভ্যালিডেটর কোড সহজে রক্ষণাবেক্ষণযোগ্য এবং নির্ভরযোগ্য।
Guava কাস্টম ভ্যালিডেটরের সীমাবদ্ধতা
- কিছু সীমিত ভ্যালিডেশন: Guava লাইব্রেরি কিছু প্রাথমিক ভ্যালিডেশন সুবিধা প্রদান করলেও, অধিক জটিল ভ্যালিডেশনের জন্য অন্যান্য লাইব্রেরি (যেমন Hibernate Validator) ব্যবহার করা হতে পারে।
- অতিরিক্ত ডিপেনডেন্সি: Guava লাইব্রেরি ব্যবহার করলে আপনার প্রকল্পে অতিরিক্ত ডিপেনডেন্সি যুক্ত হয়।
Guava লাইব্রেরির মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করে আপনি সহজে ইনপুট ভ্যালিডেশন করতে পারেন, যা আপনার কোডের গুণগত মান বাড়ায় এবং ত্রুটি চেকিংয়ের প্রক্রিয়াকে আরও কার্যকর করে তোলে।
Read more