MapStruct একটি শক্তিশালী টুল যা JavaBeans (POJOs) এর মধ্যে ম্যাপিং সহজ করে এবং এর মাধ্যমে আপনাকে কাস্টম ম্যাপিং, ডেটা কনভার্সন এবং ম্যাপিং এক্সপ্রেশন পরিচালনা করতে সহায়তা করে। Enum Mapping হল MapStruct এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনাকে String থেকে Enum এবং Enum থেকে String এ ম্যাপিং করতে সহায়তা করে।
Enum Mapping এর ধারণা
Enum Mapping তখন প্রয়োজন হয় যখন আপনি String অথবা Integer এর মানকে একটি Enum এ ম্যাপ করতে চান অথবা Enum এর মানকে অন্য কোনো টাইপে (যেমন, String বা Integer) রূপান্তর করতে চান।
MapStruct এর মাধ্যমে Enum Mapping খুবই সহজ, এবং এটি @Mapping অ্যানোটেশন ব্যবহার করে পরিচালিত হয়।
১. Enum Mapping এর উদাহরণ
ধরা যাক, আমাদের একটি Status নামক Enum রয়েছে এবং আমাদের লক্ষ্য হল, String বা Integer মান থেকে এই Enum মানে ম্যাপিং করা।
১.১ Enum Class Definition
public enum Status {
ACTIVE,
INACTIVE,
PENDING;
}
এখানে, আমাদের Status নামক একটি Enum রয়েছে, যা তিনটি মান ধারণ করে: ACTIVE, INACTIVE, এবং PENDING।
১.২ DTO (Data Transfer Object)
public class UserDTO {
private String status;
// Getter and Setter
}
এখানে, UserDTO ক্লাসে একটি status নামক String প্রপার্টি রয়েছে, যেটি Status Enum এর সাথে ম্যাপ করা হবে।
১.৩ Mapper Interface with Enum Mapping
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
@Mapping(source = "status", target = "status")
User userDTOToUser(UserDTO userDTO);
}
এখানে, UserMapper ইন্টারফেসে status প্রপার্টি ম্যাপিং করা হচ্ছে, যা String থেকে Enum এবং Enum থেকে String এর মধ্যে কনভার্ট হবে।
১.৪ User Class
public class User {
private Status status;
// Getter and Setter
}
এখানে, User ক্লাসে Status নামক Enum টাইপের প্রপার্টি রয়েছে।
১.৫ Main Class (Usage)
public class Main {
public static void main(String[] args) {
User user = new User();
user.setStatus(Status.ACTIVE);
// Mapping
UserDTO userDTO = UserMapper.INSTANCE.userToUserDTO(user);
System.out.println("Mapped Status in DTO: " + userDTO.getStatus());
// Reversing the mapping
User userMappedBack = UserMapper.INSTANCE.userDTOToUser(userDTO);
System.out.println("Mapped Status back in User: " + userMappedBack.getStatus());
}
}
এখানে, User অবজেক্টের status প্রপার্টি ACTIVE হিসেবে সেট করা হচ্ছে এবং তারপর UserMapper এর মাধ্যমে এটি UserDTO তে ম্যাপ করা হচ্ছে।
২. String থেকে Enum এবং Enum থেকে String Mapping
MapStruct এর মাধ্যমে আপনি String থেকে Enum এবং Enum থেকে String ম্যাপিং করতে পারেন, যখন আপনার প্রয়োজন হয় Enum এর মানকে String হিসেবে রূপান্তর করার অথবা String এর মানকে Enum হিসেবে রূপান্তর করার।
২.১ String থেকে Enum Mapping
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
default Status map(String value) {
return Status.valueOf(value.toUpperCase());
}
এখানে, map() মেথড ব্যবহার করে String কে Enum তে ম্যাপ করা হচ্ছে।
২.২ Enum থেকে String Mapping
@Mapping(source = "status", target = "status")
User userDTOToUser(UserDTO userDTO);
default String map(Status status) {
return status.name();
}
এখানে, map() মেথড ব্যবহার করে Enum কে String তে ম্যাপ করা হচ্ছে।
৩. MapStruct দিয়ে Custom Enum Mapping
MapStruct এর সাহায্যে আপনি কাস্টম Enum Mapping করতে পারেন, যেখানে Enum এর মান পরিবর্তন করতে চাইলে আপনি @ValueMapping অ্যানোটেশন ব্যবহার করতে পারেন।
৩.১ Custom Enum Mapping Example
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ValueMapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
@ValueMapping(source = "ACTIVE", target = "A")
@ValueMapping(source = "INACTIVE", target = "I")
@ValueMapping(source = "PENDING", target = "P")
String map(Status status);
}
এখানে, @ValueMapping অ্যানোটেশন ব্যবহার করে Enum এর বিভিন্ন মানের সাথে কাস্টম স্ট্রিং মান ম্যাপ করা হয়েছে।
সারাংশ
MapStruct এর মাধ্যমে Enum Mapping খুবই সহজ এবং কার্যকরী। এটি আপনাকে Enum এবং String এর মধ্যে ম্যাপিং করতে সহায়তা করে এবং আপনি কাস্টম ম্যাপিং লজিক প্রয়োগ করতে পারেন। MapStruct এর @Mapping এবং @ValueMapping অ্যানোটেশন ব্যবহার করে Enum এর মানকে String বা অন্য কোনো টাইপে ম্যাপ করা যেতে পারে, যা ডেটা ট্রান্সফারের জন্য অত্যন্ত গুরুত্বপূর্ণ। String থেকে Enum এবং Enum থেকে String ম্যাপিং এর মাধ্যমে আপনি আপনার ডোমেইন অবজেক্টের ডেটা কনভার্সন আরো সহজ এবং সুষ্ঠু করতে পারেন।
Read more