Date Handling এবং Custom Converters হল Apache Commons BeanUtils লাইব্রেরির দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটা ম্যানিপুলেশন এবং টাইপ কনভার্সনকে সহজ করে। Date Handling এর মাধ্যমে আপনি Java Beans-এর Date টাইপ প্রপার্টি সঠিকভাবে পরিচালনা করতে পারেন, এবং Custom Converters ব্যবহার করে আপনি বিভিন্ন ডেটা টাইপের মধ্যে কাস্টম কনভার্সন লজিক প্রয়োগ করতে পারেন।
1. Date Handling with BeanUtils (BeanUtils দিয়ে তারিখ পরিচালনা)
Java Bean-এর মধ্যে Date টাইপ প্রপার্টি সাধারণত java.util.Date অথবা java.time.LocalDate ধরনের থাকে। BeanUtils লাইব্রেরি সাধারণভাবে String টাইপের ডেটা থেকে Date টাইপে কনভার্সন করতে সহায়তা করে। কিন্তু, Date প্রপার্টির মানকে কাস্টম ফরম্যাটে রূপান্তর করতে আপনাকে কাস্টম কনভার্টার তৈরি করতে হতে পারে।
উদাহরণ: Date Handling with BeanUtils
ধরা যাক, আমাদের একটি Person Bean রয়েছে, যার মধ্যে একটি Date টাইপ প্রপার্টি birthDate রয়েছে, এবং আমরা সেটি একটি String ফরম্যাট থেকে Date-এ কনভার্ট করতে চাই।
import org.apache.commons.beanutils.BeanUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
// Create a Map with String formatted date
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "John");
personMap.put("birthDate", "1985-06-15");
// Create a Person object
Person person = new Person();
// Custom date format for conversion
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// Convert the birthDate from String to Date
String birthDateStr = personMap.get("birthDate");
Date birthDate = dateFormat.parse(birthDateStr);
person.setBirthDate(birthDate);
// Print the populated Person object's properties
System.out.println("Name: " + person.getName()); // Output: John
System.out.println("Birth Date: " + person.getBirthDate()); // Output: Sat Jun 15 00:00:00 GMT 1985
}
}
class Person {
private String name;
private Date birthDate;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
}এখানে, birthDate প্রপার্টি String ফরম্যাটে এসেছে এবং আমরা সেটিকে Date টাইপে কনভার্ট করেছি SimpleDateFormat ব্যবহার করে। এরপর BeanUtils.populate() এর মাধ্যমে Person Bean-এ ডেটা পপুলেট করা হয়েছে।
আউটপুট:
Name: John
Birth Date: Sat Jun 15 00:00:00 GMT 19852. Custom Converters (কাস্টম কনভার্টার)
Custom Converters ব্যবহার করে আপনি BeanUtils-এর টাইপ কনভার্সন আচরণ কাস্টমাইজ করতে পারেন। যখন ডেটার মধ্যে কাস্টম কনভার্সন দরকার হয়, তখন আপনি একটি কাস্টম কনভার্টার তৈরি করতে পারেন, যা নির্দিষ্ট লজিক অনুসারে ডেটা কনভার্ট করবে।
কাস্টম কনভার্টার তৈরি করা
আপনি যদি একটি বিশেষ ধরনের টাইপ কনভার্সন করতে চান, যেমন String থেকে Date বা String থেকে Integer তে রূপান্তর, তাহলে আপনাকে একটি কাস্টম কনভার্টার তৈরি করতে হবে।
উদাহরণ: কাস্টম কনভার্টার তৈরি করা
ধরা যাক, আমাদের একটি Person Bean রয়েছে, এবং আমরা String থেকে Date কনভার্ট করার জন্য একটি কাস্টম কনভার্টার তৈরি করতে চাই।
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.BeanUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
// Register a custom converter for Date
BeanUtilsBean beanUtilsBean = new BeanUtilsBean();
beanUtilsBean.getConvertUtils().register(new DateConverter(), Date.class);
// Create a Map with String formatted date
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "Alice");
personMap.put("birthDate", "1985-06-15");
// Create a Person object to populate
Person person = new Person();
// Populate the Person object with data from the Map using the custom converter
beanUtilsBean.getPropertyUtils().copyProperties(person, personMap);
// Print the populated properties
System.out.println("Name: " + person.getName()); // Output: Alice
System.out.println("Birth Date: " + person.getBirthDate()); // Output: Mon Jun 15 00:00:00 GMT 1985
}
}
class Person {
private String name;
private Date birthDate;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
}
// Custom converter to convert String to Date
class DateConverter implements Converter {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Object convert(Class type, Object value) {
if (value instanceof String) {
try {
return dateFormat.parse((String) value);
} catch (Exception e) {
return null;
}
}
return value;
}
}এখানে, DateConverter একটি কাস্টম কনভার্টার তৈরি করেছে যা String থেকে Date কনভার্ট করতে সক্ষম। আমরা এই কাস্টম কনভার্টারকে BeanUtilsBean-এ রেজিস্টার করেছি যাতে Map থেকে Person Bean-এ ডেটা পপুলেট করার সময় birthDate প্রপার্টির জন্য কাস্টম কনভার্সন প্রয়োগ করা হয়।
আউটপুট:
Name: Alice
Birth Date: Mon Jun 15 00:00:00 GMT 19853. BeanUtilsBean Customization for Date Handling
যখন আপনি Date টাইপ প্রপার্টি কাস্টম কনভার্সন বা তারিখ ফরম্যাটিং করতে চান, তখন BeanUtilsBean কাস্টমাইজ করে সহজেই কাজ করতে পারেন। উপরের উদাহরণে DateConverter ব্যবহার করা হয়েছে, যা একটি নির্দিষ্ট String ফরম্যাট থেকে Date তৈরি করতে সাহায্য করেছে।
এছাড়া, আপনি BeanUtilsBean ক্লাসের ConvertUtilsBean ব্যবহার করে অন্যান্য কাস্টম কনভার্সন লজিকও প্রয়োগ করতে পারেন।
সারাংশ
- Date Handling: BeanUtils লাইব্রেরি দিয়ে আপনি Java Bean-এর Date প্রপার্টি সহজে ম্যানিপুলেট এবং কনভার্ট করতে পারেন।
- Custom Converters: আপনি যদি কাস্টম কনভার্সন চান, যেমন String থেকে Date বা অন্য টাইপে কনভার্ট, তাহলে আপনি কাস্টম কনভার্টার তৈরি করতে পারেন এবং BeanUtils-এ রেজিস্টার করতে পারেন।
- BeanUtilsBean Customization: BeanUtilsBean এর মাধ্যমে আপনি Date এবং অন্যান্য প্রপার্টির কাস্টম কনভার্সন লজিক এবং ম্যানিপুলেশন করতে পারেন।
BeanUtils লাইব্রেরি Java Beans-এর মধ্যে টাইপ কনভার্সন এবং ডেটা ম্যানিপুলেশন খুব সহজ করে তোলে এবং কাস্টম কনভার্সন ব্যবহার করে আপনি আরও উন্নত এবং বিশেষ ধরনের কাজ করতে পারেন।
Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে Date প্রপার্টি ম্যানেজ (এনক্যাপসুলেট, কপি বা কনভার্ট) করা সম্ভব। BeanUtils.copyProperties() এবং BeanUtils.setProperty() মেথড ব্যবহার করে আপনি Date টাইপের প্রপার্টি কপি বা সেট করতে পারেন। তবে, Date প্রপার্টি ম্যানিপুলেশন করার সময় কিছু বিশেষ দিকের দিকে নজর দেওয়া প্রয়োজন, যেমন টাইপ কনভার্সন, ফরম্যাটিং এবং null ভ্যালু হ্যান্ডলিং।
1. Date প্রপার্টি ম্যানেজমেন্ট:
BeanUtils-এর মাধ্যমে Date টাইপের প্রপার্টি কপি করার সময় BeanUtils স্বাভাবিকভাবে String এবং Date টাইপের মধ্যে কনভার্সন করে, তবে যদি আপনি কাস্টম ফরম্যাট ব্যবহার করতে চান, তাহলে কিছু অতিরিক্ত কাস্টম লজিক ব্যবহার করতে হতে পারে।
সাধারণভাবে Date প্রপার্টি কপি করার জন্য BeanUtils ব্যবহার করা হয়, তবে এটি String থেকে Date টাইপ কনভার্সনও স্বয়ংক্রিয়ভাবে করতে পারে।
2. BeanUtils এর মাধ্যমে Date প্রপার্টি কপি করা
উদাহরণ ১: সাধারণ Date প্রপার্টি কপি করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.Date;
public class BeanUtilsDateExample {
public static void main(String[] args) {
try {
// Create source object with Date property
Person person1 = new Person("John", new Date());
// Create target object
Person person2 = new Person();
// Copy properties from person1 to person2
BeanUtils.copyProperties(person2, person1);
// Output the copied Date property
System.out.println("Name: " + person2.getName());
System.out.println("Date of Birth: " + person2.getDob()); // Output: Current date
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private Date dob;
public Person() {}
public Person(String name, Date dob) {
this.name = name;
this.dob = dob;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}ব্যাখ্যা:
Dateটাইপ প্রপার্টি:dobপ্রপার্টি হলDateটাইপের।BeanUtils.copyProperties(): এখানেperson1থেকেperson2তেdobপ্রপার্টি কপি করা হয়েছে। এটি স্বয়ংক্রিয়ভাবেDateটাইপের ডেটা কপি করবে।
আউটপুট:
Name: John
Date of Birth: Fri Nov 17 17:12:22 GMT 2024এখানে Date প্রপার্টি কপি করা হয়েছে। ডেটা টাইপের জন্য কাস্টম কনভার্সন বা ফরম্যাটিংয়ের প্রয়োজন নেই।
3. Date ফরম্যাটিং এবং টাইপ কনভার্সন
যদি আপনি একটি String টাইপের ডেটা (যেমন "2024-11-17") কে Date টাইপে কনভার্ট করতে চান, তবে কিছু অতিরিক্ত কাজ করতে হবে। Apache Commons BeanUtils সরাসরি টাইপ কনভার্সন করার জন্য কাস্টম কনভার্সন ব্যবহার করতে পারে। এতে আপনাকে DateFormat বা SimpleDateFormat ব্যবহার করতে হতে পারে।
উদাহরণ ২: String থেকে Date কনভার্ট করা
import org.apache.commons.beanutils.BeanUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BeanUtilsDateConversionExample {
public static void main(String[] args) {
try {
// Create source object with String date property
Person person1 = new Person("John", "2024-11-17");
// Create target object
Person person2 = new Person();
// Convert String to Date and copy properties
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = person1.getDobString();
Date date = sdf.parse(dateString); // Convert String to Date
// Set the converted Date to person2
person2.setDob(date);
// Output the copied Date property
System.out.println("Name: " + person2.getName());
System.out.println("Date of Birth: " + person2.getDob()); // Output: Date in Date format
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private Date dob;
private String dobString;
public Person() {}
public Person(String name, String dobString) {
this.name = name;
this.dobString = dobString;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public String getDobString() {
return dobString;
}
public void setDobString(String dobString) {
this.dobString = dobString;
}
}ব্যাখ্যা:
dobString: এখানে একটিStringপ্রপার্টি ব্যবহার করা হয়েছে, যা Date টাইপে কনভার্ট হবে।SimpleDateFormat:dobStringথেকেDateটাইপে কনভার্ট করার জন্যSimpleDateFormatব্যবহার করা হয়েছে।setDob(): কনভার্টেডDateপ্রপার্টিperson2-এ সেট করা হয়েছে।
আউটপুট:
Name: John
Date of Birth: Sun Nov 17 00:00:00 GMT 2024এখানে String থেকে Date টাইপে কনভার্সন সফলভাবে সম্পন্ন হয়েছে এবং person2 এর dob প্রপার্টি সেট করা হয়েছে।
4. Date প্রপার্টি ম্যানিপুলেশন (Custom Date Conversion)
যদি আপনি একটি কাস্টম কনভার্সন লজিক ব্যবহার করতে চান (যেমন, Date টাইপের প্রপার্টি মান নির্দিষ্ট ফরম্যাটে রাখতে), তাহলে আপনাকে Apache Commons BeanUtils এর সাথে Custom Converter তৈরি করতে হবে।
উদাহরণ ৩: কাস্টম Date কনভার্সন
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.BeanUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomDateConverter implements Converter {
@Override
public Object convert(Class<?> type, Object value) {
if (value == null) {
return null;
}
if (value instanceof String) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse((String) value);
} catch (Exception e) {
e.printStackTrace();
}
}
return value;
}
}
public class BeanUtilsCustomDateExample {
public static void main(String[] args) {
try {
// Register custom date converter
BeanUtilsBean beanUtils = new BeanUtilsBean();
beanUtils.getConvertUtils().register(new CustomDateConverter(), Date.class);
// Create source object with String date property
Person person1 = new Person("John", "2024-11-17");
// Create target object
Person person2 = new Person();
// Convert String to Date using custom converter
BeanUtils.copyProperties(person2, person1);
// Output the result
System.out.println("Name: " + person2.getName()); // Output: John
System.out.println("Date of Birth: " + person2.getDob()); // Output: Date in Date format
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- এখানে
CustomDateConverterতৈরি করা হয়েছে, যা String থেকে Date টাইপে কনভার্ট করবে। BeanUtilsBeanএরgetConvertUtils().register()মেথড ব্যবহার করে কাস্টম কনভার্টার রেজিস্টার করা হয়েছে।BeanUtils.copyProperties()ব্যবহার করেperson1থেকেperson2তে ডেটা কপি করা হয়েছে।
সারাংশ
- Apache Commons BeanUtils এর মাধ্যমে
Dateটাইপের প্রপার্টি কপি এবং টাইপ কনভার্সন করা সম্ভব। SimpleDateFormatবা কাস্টম কনভার্টার ব্যবহার করে String থেকে Date টাইপে কনভার্সন করা যেতে
পারে।
BeanUtils.copyProperties()বাBeanUtils.setProperty()মেথড ব্যবহার করে Date টাইপের প্রপার্টি কপি বা ম্যানিপুলেট করা যায়।- আপনি যদি কাস্টম কনভার্সন করতে চান, তবে একটি কাস্টম Converter তৈরি করে টাইপ কনভার্সন বা ম্যানিপুলেশন সম্পন্ন করতে পারেন।
Custom Converters হল এমন ক্লাস বা ফাংশন, যা একটি ডেটা টাইপ থেকে আরেকটি ডেটা টাইপে রূপান্তর করতে ব্যবহৃত হয়। এটি বিশেষভাবে প্রয়োজন হয় যখন আপনি আপনার প্রয়োজন অনুযায়ী ডেটা কনভার্ট করতে চান যা ডিফল্ট কনভার্সন সাপোর্ট করে না। Apache Commons BeanUtils এবং Spring Framework উভয়ই কাস্টম কনভার্টার তৈরির সুবিধা দেয়।
Custom Converters Apache Commons BeanUtils এ
Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে কাস্টম কনভার্টার তৈরি করা যায়, যেখানে Converter ইন্টারফেস ব্যবহার করে টাইপ কনভার্সন কাস্টমাইজ করা হয়।
Custom Converter তৈরি এবং ব্যবহার উদাহরণ
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
public class CustomConverterExample {
public static void main(String[] args) {
try {
// Register the custom converter
ConvertUtils.register(new StringToAddressConverter(), Address.class);
// Source data
String addressString = "123 Main St, City A";
// Target object
Person person = new Person();
// Set the address property using BeanUtils (with custom converter)
BeanUtils.setProperty(person, "address", addressString);
// Output the converted Address object
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("City: " + person.getAddress().getCity());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Custom Converter: String to Address
class StringToAddressConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value instanceof String) {
String[] parts = ((String) value).split(", ");
return new Address(parts[0], parts[1]);
}
return null;
}
}
// Address class
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
// Person class
class Person {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}ব্যাখ্যা:
- Custom Converter তৈরি:
StringToAddressConverterক্লাসটি তৈরি করা হয়েছে, যাConverterইন্টারফেস ইমপ্লিমেন্ট করে। - Converter রেজিস্ট্রেশন:
ConvertUtils.register()মেথড ব্যবহার করে কাস্টম কনভার্টার রেজিস্টার করা হয়েছে। - BeanUtils.setProperty(): কনভার্টার ব্যবহার করে
StringথেকেAddressটাইপে কনভার্ট করেPersonক্লাসে সেট করা হয়েছে।
Custom Converters Spring Framework এ
Spring Framework-এ কাস্টম কনভার্টার তৈরি করতে Converter ইন্টারফেস ব্যবহার করা হয়, যা org.springframework.core.convert.converter.Converter প্যাকেজের অংশ।
Custom Converter তৈরি এবং ব্যবহার উদাহরণ
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.DefaultConversionService;
public class SpringCustomConverterExample {
public static void main(String[] args) {
// Create application context
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// Get the conversion service
DefaultConversionService conversionService = context.getBean(DefaultConversionService.class);
// Convert String to Address using custom converter
String addressString = "456 Elm St, City B";
Address address = conversionService.convert(addressString, Address.class);
// Output the converted Address object
System.out.println("Street: " + address.getStreet());
System.out.println("City: " + address.getCity());
context.close();
}
}
// Custom Converter: String to Address
class StringToAddressConverter implements Converter<String, Address> {
@Override
public Address convert(String source) {
String[] parts = source.split(", ");
return new Address(parts[0], parts[1]);
}
}
// Address class
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
// Spring Configuration
@Configuration
class AppConfig {
@Bean
public DefaultConversionService conversionService() {
DefaultConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(new StringToAddressConverter());
return conversionService;
}
}ব্যাখ্যা:
- Custom Converter তৈরি:
StringToAddressConverterএকটি কনভার্টার যাStringথেকেAddressটাইপে রূপান্তর করে। - DefaultConversionService: Spring এর ডিফল্ট কনভার্সন সার্ভিস ব্যবহার করা হয়েছে, যা কাস্টম কনভার্টার রেজিস্টার করার জন্য ব্যবহৃত হয়েছে।
- convert() মেথড: Spring এর কনভার্সন সার্ভিস ব্যবহার করে
StringথেকেAddressকনভার্ট করা হয়েছে।
Custom Converters এর সুবিধা
- কাস্টম টাইপ সাপোর্ট: ডিফল্টভাবে সমর্থিত না এমন টাইপগুলোর জন্য কনভার্সন তৈরি করা।
- পুনঃব্যবহারযোগ্যতা (Reusability): একবার তৈরি করলে কাস্টম কনভার্টার বারবার ব্যবহার করা যায়।
- সারলীকরণ (Simplification): জটিল ডেটা টাইপ ম্যানিপুলেশন সহজ করা।
- Spring Integration: Spring Framework-এর কনভার্সন সার্ভিসে কাস্টম কনভার্টার সহজেই যোগ করা যায়।
Custom Converters BeanUtils বনাম Spring Framework এ
| বৈশিষ্ট্য | BeanUtils Custom Converter | Spring Custom Converter |
|---|---|---|
| ইন্টারফেস | org.apache.commons.beanutils.Converter | org.springframework.core.convert.converter.Converter |
| টাইপ কনভার্সন সাপোর্ট | টাইপ কনভার্সন এবং Bean ম্যানিপুলেশন | টাইপ কনভার্সন এবং Spring Context Integration |
| রেজিস্ট্রেশন | ConvertUtils.register() ব্যবহার করা হয়। | DefaultConversionService.addConverter() ব্যবহার করা হয়। |
| Spring Integration | সরাসরি সমর্থিত নয়। | Spring Bean এবং Context-এর সাথে গভীরভাবে ইন্টিগ্রেটেড। |
সারাংশ
- BeanUtils-এ কাস্টম কনভার্টার তৈরি সহজ এবং ডায়নামিক টাইপ কনভার্সনের জন্য কার্যকর।
- Spring Framework-এ কাস্টম কনভার্টার Spring Context এবং Bean Configuration-এর সাথে গভীরভাবে ইন্টিগ্রেট করা যায়।
- আপনার প্রকল্পের ধরন অনুযায়ী BeanUtils বা Spring Framework ব্যবহার করুন। Spring বেশি শক্তিশালী এবং বৃহৎ অ্যাপ্লিকেশনের জন্য বেশি কার্যকর।
Java Beans এবং Apache Commons BeanUtils লাইব্রেরি ব্যবহার করার সময় Date, Number, এবং Complex Types (যেমন, Custom Objects) এর টাইপ কনভার্সন করার প্রয়োজন হয়। BeanUtils এ টাইপ কনভার্সন সাধারণত Converters এর মাধ্যমে করা হয়, যেখানে DateConverter, NumberConverter, এবং Custom Converters ব্যবহার করা হয়।
এই কনভার্সন প্রক্রিয়াটি String থেকে নির্দিষ্ট টাইপে ডেটা কনভার্ট করার জন্য ব্যবহৃত হয়।
Date, Number, এবং Complex Type এর কনভার্টার ব্যবহারের উদাহরণ
1. DateConverter
DateConverter ব্যবহার করা হয় String থেকে Date টাইপে ডেটা কনভার্ট করতে। এটি patterns সেট করার মাধ্যমে বিভিন্ন ফরম্যাটে ডেটা কনভার্ট করতে সাহায্য করে।
উদাহরণ: DateConverter ব্যবহার করে String থেকে Date কনভার্ট করা
import org.apache.commons.beanutils.converters.DateConverter;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Date;
public class DateConverterExample {
public static void main(String[] args) {
try {
// Create a DateConverter instance with custom date formats
DateConverter dateConverter = new DateConverter(null);
dateConverter.setPatterns(new String[]{"yyyy-MM-dd", "MM/dd/yyyy"});
// Register the date converter with BeanUtils
BeanUtils.getConvertUtils().register(dateConverter, Date.class);
// Create a map with a date string
String dateStr = "2024-11-15";
Date convertedDate = (Date) BeanUtils.convert(dateStr, Date.class);
// Output the converted date
System.out.println("Converted Date: " + convertedDate); // Output: Fri Nov 15 00:00:00 UTC 2024
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- এখানে আমরা একটি
DateConverterতৈরি করেছি, যা "yyyy-MM-dd" এবং "MM/dd/yyyy" এই ফরম্যাটে ডেটা কনভার্ট করতে সক্ষম। BeanUtils.convert()ব্যবহার করে, একটি String টাইপের ডেটাকে Date টাইপে কনভার্ট করা হয়েছে।
2. NumberConverter
NumberConverter ব্যবহার করা হয় String থেকে Number (যেমন Integer, Double) টাইপে কনভার্ট করতে। এটি সাধারণত বিভিন্ন সংখ্যার ফরম্যাটের জন্য ব্যবহৃত হয়, যেমন দশমিক সহ সংখ্যা বা বড় সংখ্যার ফরম্যাট।
উদাহরণ: NumberConverter ব্যবহার করে String থেকে Number কনভার্ট করা
import org.apache.commons.beanutils.converters.NumberConverter;
import org.apache.commons.beanutils.BeanUtils;
public class NumberConverterExample {
public static void main(String[] args) {
try {
// Create a NumberConverter instance
NumberConverter numberConverter = new NumberConverter(null);
// Register the NumberConverter with BeanUtils
BeanUtils.getConvertUtils().register(numberConverter, Number.class);
// Convert a String to an Integer
String numberStr = "1234";
Integer convertedNumber = (Integer) BeanUtils.convert(numberStr, Integer.class);
// Output the converted number
System.out.println("Converted Number: " + convertedNumber); // Output: 1234
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- এখানে
NumberConverterব্যবহার করা হয়েছে String টাইপ থেকে Integer কনভার্ট করার জন্য। BeanUtils.convert()মেথড ব্যবহার করে,Stringথেকে Integer টাইপে কনভার্ট করা হয়েছে।
3. Complex Type Converters (Custom Types)
Complex Types কনভার্ট করার জন্য আপনি Custom Converters তৈরি করতে পারেন। যখন একটি Java Bean অন্য Bean ধারণ করে বা একটি কমপ্লেক্স অবজেক্ট থাকে, তখন এই কাস্টম কনভার্টার প্রয়োজন হতে পারে।
উদাহরণ: Complex Type Converters (Custom Bean) কনভার্ট করা
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.HashMap;
public class ComplexTypeConverterExample {
public static void main(String[] args) {
try {
// Create a custom converter for converting String to Person object
BeanUtils.getConvertUtils().register(new Converter() {
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
String[] data = ((String) value).split(",");
return new Person(data[0], Integer.parseInt(data[1]));
}
}, Person.class);
// Create a Map with String data for Person
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "John");
personMap.put("age", "30");
// Convert Map to Person object using BeanUtils
Person person = new Person();
BeanUtils.populate(person, personMap);
// Output the converted Person object
System.out.println("Name: " + person.getName()); // Output: John
System.out.println("Age: " + person.getAge()); // Output: 30
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে একটি custom converter তৈরি করা হয়েছে যা String টাইপের ডেটা (যেমন
"John,30") কে Person অবজেক্টে কনভার্ট করবে। BeanUtils.populate()মেথড ব্যবহার করে, Map থেকে Person অবজেক্ট populate করা হয়েছে, যেখানে কাস্টম কনভার্টার ব্যবহার করা হয়েছে।
সারাংশ
- DateConverter, NumberConverter, এবং Complex Type Converters ব্যবহার করে আপনি সহজেই String থেকে Date, Number, এবং Custom Types (যেমন, Bean) এ ডেটা কনভার্ট করতে পারেন।
- DateConverter এবং NumberConverter মেথড গুলি ডেটা টাইপ কনভার্সনের জন্য ব্যবহৃত হয়।
- Complex Type Converters কাস্টম অবজেক্টের কনভার্সন করতে ব্যবহৃত হয়, যেমন একটি
Stringথেকে একটি কাস্টম Java Bean তৈরি করা।
কাস্টম কনভার্টার হল এমন একটি ক্লাস বা পদ্ধতি যা এক ধরনের ডেটা (যেমন, 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