কাস্টম কনভার্টার হল এমন একটি ক্লাস বা পদ্ধতি যা এক ধরনের ডেটা (যেমন, String, Integer, Date) অন্য ধরনের ডেটাতে কনভার্ট করার জন্য ব্যবহৃত হয়। এক্সপ্লিসিট টাইপ কনভার্সন বা ডেটা রূপান্তরের জন্য কাস্টম কনভার্টার খুবই কার্যকরী হতে পারে, বিশেষ করে যখন ডেটার স্ট্রাকচার বা ফরম্যাট সাধারণ Java BeanUtils বা অন্যান্য লাইব্রেরি দ্বারা কভার করা না হয়।
কাস্টম কনভার্টার সাধারণত DTOs, form data, বা Web Services এর জন্য ব্যবহৃত হয় যেখানে ডেটার কনভার্সন স্বয়ংক্রিয়ভাবে করতে হয়।
কাস্টম কনভার্টার তৈরির পদ্ধতি:
- কাস্টম টাইপ কনভার্সন তৈরি করা: একটি ক্লাস তৈরি করা যা কনভার্সন ফাংশন প্রদান করবে।
- BeanUtils বা PropertyUtils দিয়ে কাস্টম কনভার্টার ব্যবহার করা: BeanUtils বা PropertyUtils ব্যবহার করে, কাস্টম কনভার্টারটি কার্যকরীভাবে একটি Bean তে প্রয়োগ করা।
উদাহরণ ১: String to Date কাস্টম কনভার্টার
ধরা যাক, আপনি একটি String ডেটাকে Date টাইপে কনভার্ট করতে চান যেখানে ডেটার ফরম্যাট **"dd-MM-yyyy"**। এখানে আমরা BeanUtilsBean এর সাথে কাস্টম কনভার্টার ব্যবহার করব।
১. কাস্টম কনভার্টার তৈরি করা
import org.apache.commons.beanutils.Converter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
// Convert String to Date (Assuming the format is "dd-MM-yyyy")
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
try {
return dateFormat.parse(value.toString());
} catch (Exception e) {
throw new IllegalArgumentException("Invalid date format, expected dd-MM-yyyy");
}
}
}২. কাস্টম কনভার্টার ব্যবহার করে Bean তে Data Transfer
import org.apache.commons.beanutils.BeanUtilsBean;
import java.util.HashMap;
import java.util.Map;
public class CustomConverterExample {
public static void main(String[] args) {
try {
// Create a Map with String data (date in "dd-MM-yyyy" format)
Map<String, String> properties = new HashMap<>();
properties.put("dateOfBirth", "25-12-1990");
// Create a Person object (Bean)
Person person = new Person();
// Register the custom converter
BeanUtilsBean.getInstance().getConvertUtils().register(new StringToDateConverter(), Date.class);
// Populate the Person object using the custom converter for 'dateOfBirth'
BeanUtilsBean.getInstance().populate(person, properties);
// Output the converted Date value
System.out.println("Date of Birth: " + person.getDateOfBirth());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}ব্যাখ্যা:
- StringToDateConverter কাস্টম কনভার্টার তৈরি করা হয়েছে যাতে String টাইপের ডেটা Date টাইপে কনভার্ট করা যায়। কনভার্টারটি dd-MM-yyyy ফরম্যাটে ডেটা কনভার্ট করার জন্য SimpleDateFormat ব্যবহার করে।
- BeanUtilsBean এর মাধ্যমে Map এর ডেটা Person Bean তে কপি করা হয়েছে এবং String ডেটাকে Date টাইপে কনভার্ট করা হয়েছে।
BeanUtilsBean.getInstance().getConvertUtils().register()মেথড দিয়ে কাস্টম কনভার্টার রেজিস্টার করা হয়েছে।
উদাহরণ ২: Currency Conversion (USD to INR)
ধরা যাক, আপনার একটি ওয়েব অ্যাপ্লিকেশন রয়েছে যেখানে ইউজারদের মার্কিন ডলার (USD) থেকে ভারতীয় রুপি (INR) এ কনভার্ট করতে হয়। এর জন্য আপনি একটি কাস্টম কনভার্টার তৈরি করতে পারেন।
১. কাস্টম কনভার্টার তৈরি করা
import org.apache.commons.beanutils.Converter;
public class CurrencyConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
// Assume 1 USD = 75 INR
double conversionRate = 75;
// Convert USD to INR
try {
double usdValue = Double.parseDouble(value.toString());
return usdValue * conversionRate;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid currency value.");
}
}
}২. কাস্টম কনভার্টার ব্যবহার করে Bean তে Data Transfer
import org.apache.commons.beanutils.BeanUtilsBean;
import java.util.HashMap;
import java.util.Map;
public class CurrencyConverterExample {
public static void main(String[] args) {
try {
// Create a Map with USD value
Map<String, String> properties = new HashMap<>();
properties.put("amountInUSD", "100");
// Create a Transaction object (Bean)
Transaction transaction = new Transaction();
// Register the custom converter for currency conversion
BeanUtilsBean.getInstance().getConvertUtils().register(new CurrencyConverter(), Double.class);
// Populate the Transaction object with data from the map
BeanUtilsBean.getInstance().populate(transaction, properties);
// Output the converted amount in INR
System.out.println("Amount in INR: " + transaction.getAmountInINR()); // Output: 7500.0
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Transaction {
private double amountInUSD;
private double amountInINR;
public double getAmountInUSD() {
return amountInUSD;
}
public void setAmountInUSD(double amountInUSD) {
this.amountInUSD = amountInUSD;
}
public double getAmountInINR() {
return amountInINR;
}
public void setAmountInINR(double amountInINR) {
this.amountInINR = amountInINR;
}
}ব্যাখ্যা:
- CurrencyConverter কাস্টম কনভার্টার তৈরি করা হয়েছে যাতে USD থেকে INR এ কনভার্ট করা যায়। এখানে 1 USD কে 75 INR ধরে কাজ করা হয়েছে।
- BeanUtilsBean এর মাধ্যমে USD এর মান Transaction Bean এ পপুলেট করা হয়েছে এবং কাস্টম কনভার্টার ব্যবহার করে INR তে কনভার্ট করা হয়েছে।
৩. Date to String (Date Format Conversion)
একটি কাস্টম কনভার্টার তৈরি করতে পারেন যা Date কে String এ কনভার্ট করে একটি নির্দিষ্ট ফরম্যাটে (যেমন, yyyy-MM-dd ফরম্যাটে)।
উদাহরণ: Date to String Conversion
import org.apache.commons.beanutils.Converter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateToStringConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
// Convert Date to String (Assuming the format is "yyyy-MM-dd")
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return dateFormat.format((Date) value);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid date format");
}
}
}ব্যাখ্যা:
- DateToStringConverter কাস্টম কনভার্টার তৈরি করা হয়েছে যাতে Date টাইপের ডেটাকে String এ কনভার্ট করা যায়। এই কনভার্টারটি yyyy-MM-dd ফরম্যাটে Date কে String এ রূপান্তর করবে।
সারাংশ
- কাস্টম কনভার্টার হল এমন একটি ক্লাস যা নির্দিষ্ট ডেটা টাইপের মধ্যে কনভার্সন (রূপান্তর) সম্পাদন করে, যেমন String থেকে Date, USD থেকে INR ইত্যাদি।
- Apache Commons BeanUtils এর Converter ইন্টারফেস ব্যবহার করে কাস্টম কনভার্টার তৈরি করা যায় এবং BeanUtilsBean এর মাধ্যমে এই কনভার্টার ব্যবহৃত হয়।
- কাস্টম কনভার্টার ডেটার কনভার্সন বা টাইপ কনভার্সন করার জন্য খুবই কার্যকরী, বিশেষ করে যখন ফরম্যাট বা স্ট্রাকচার খুবই নির্দ
িষ্ট এবং ডিফল্ট কনভার্সন সমাধান গ্রহণযোগ্য নয়।
কাস্টম কনভার্টার গুলি প্রোগ্রামিং এর বিভিন্ন ক্ষেত্রে ব্যবহার করা যায় যেমন ফর্ম ডেটা, API ইন্টিগ্রেশন, ডেটাবেস রিড/রাইট, এবং অন্যান্য অ্যাপ্লিকেশন লেয়ার মধ্যে ডেটা ট্রান্সফার।
Read more