Complex Nested Structure এ BeanUtils এর ব্যবহারিক উদাহরণ

Nested Beans Handling (নেস্টেড বিন হ্যান্ডলিং) - জাভা বীনইউটিলস (Java BeanUtils) - Computer Programming

374

BeanUtils লাইব্রেরি ব্যবহার করে আপনি Java Beans-এর মধ্যে ডেটা কপি করতে পারেন, এবং এটি complex nested structures (যেমন, একাধিক স্তরের nested objects) এর ক্ষেত্রে খুবই কার্যকরী হতে পারে। এখানে আমরা দেখব কিভাবে nested structures বা complex data models এর মধ্যে ডেটা কপি করা যায়।

Scenario:

ধরা যাক, আমাদের একটি Order Bean রয়েছে, যার মধ্যে অনেকগুলো nested objects রয়েছে, যেমন Customer, Address, এবং **Product**। আমাদের কাজ হবে একটি Order অবজেক্ট থেকে অন্য Order অবজেক্টে ডেটা কপি করা, যেখানে nested ডেটা এবং complex objects একে অপরকে অন্তর্ভুক্ত করছে।


উদাহরণ: Complex Nested Structure-এ BeanUtils এর ব্যবহার

Step 1: Complex Beans তৈরি করা

আমরা কয়েকটি ক্লাস তৈরি করব:

  1. Order: যেখানে Customer এবং Address অবজেক্ট থাকবে।
  2. Customer: যার মধ্যে নাম, ইমেইল এবং ফোন নম্বর থাকবে।
  3. Address: যেখানে স্ট্রিট, সিটি, এবং পোস্টাল কোড থাকবে।
  4. Product: যার মধ্যে নাম, দাম এবং পরিমাণ থাকবে।

Step 2: Bean Definition

import java.util.List;

public class Order {
    private Customer customer;
    private Address shippingAddress;
    private List<Product> products;

    // Getter and Setter methods
    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public Address getShippingAddress() {
        return shippingAddress;
    }

    public void setShippingAddress(Address shippingAddress) {
        this.shippingAddress = shippingAddress;
    }

    public List<Product> getProducts() {
        return products;
    }

    public void setProducts(List<Product> products) {
        this.products = products;
    }
}

class Customer {
    private String name;
    private String email;
    private String phone;

    // Getter and Setter methods
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

class Address {
    private String street;
    private String city;
    private String postalCode;

    // Getter and Setter methods
    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;
    }

    public String getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }
}

class Product {
    private String name;
    private double price;
    private int quantity;

    // Getter and Setter methods
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

Step 3: BeanUtils দিয়ে Nested Objects Copy করা

এখন, আমরা BeanUtils.copyProperties() মেথড ব্যবহার করব যাতে Order অবজেক্টের মধ্যে থাকা Customer, Address এবং Product এর প্রপার্টি কপি করা যায়।

import org.apache.commons.beanutils.BeanUtils;
import java.util.Arrays;

public class ComplexBeanCopyExample {
    public static void main(String[] args) {
        try {
            // Create source Order object with nested properties
            Order sourceOrder = new Order();

            Customer sourceCustomer = new Customer();
            sourceCustomer.setName("John Doe");
            sourceCustomer.setEmail("john.doe@example.com");
            sourceCustomer.setPhone("123-456-7890");

            Address sourceAddress = new Address();
            sourceAddress.setStreet("123 Elm Street");
            sourceAddress.setCity("Springfield");
            sourceAddress.setPostalCode("62701");

            Product sourceProduct1 = new Product();
            sourceProduct1.setName("Laptop");
            sourceProduct1.setPrice(1200.00);
            sourceProduct1.setQuantity(1);

            Product sourceProduct2 = new Product();
            sourceProduct2.setName("Phone");
            sourceProduct2.setPrice(800.00);
            sourceProduct2.setQuantity(2);

            sourceOrder.setCustomer(sourceCustomer);
            sourceOrder.setShippingAddress(sourceAddress);
            sourceOrder.setProducts(Arrays.asList(sourceProduct1, sourceProduct2));

            // Create target Order object
            Order targetOrder = new Order();

            // Use BeanUtils to copy properties from source to target
            BeanUtils.copyProperties(targetOrder, sourceOrder);

            // Print the copied properties to check
            System.out.println("Target Order Customer Name: " + targetOrder.getCustomer().getName());
            System.out.println("Target Order Shipping Address: " + targetOrder.getShippingAddress().getStreet());
            System.out.println("Target Order Product 1 Name: " + targetOrder.getProducts().get(0).getName());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • Order, Customer, Address, এবং Product Beans তৈরি করা হয়েছে।
  • sourceOrder থেকে targetOrder এ প্রপার্টি কপি করার জন্য BeanUtils.copyProperties() ব্যবহার করা হয়েছে।
  • BeanUtils.copyProperties() মেথড শুধুমাত্র flat properties (যেমন String, int) কপি করতে পারে, কিন্তু nested properties (যেমন Customer এবং Address অবজেক্ট) কপি করতে এটি সরাসরি কাজ করবে না।
  • Nested properties কপি করতে, যদি nested object গুলোর প্রপার্টি কপি করতে চান, তখন আপনাকে recursive copy বা custom copy logic প্রয়োগ করতে হবে। BeanUtils সাধারণত এই ধরনের nested objects কে একসাথে কপি করে না।

৪. Deep Copy (Nested Objects Copying)

যখন আপনার nested objects (যেমন Customer, Address) সহ complex structures কপি করতে হয়, তখন deep copy করার প্রয়োজন হয়, যেখানে source object এর ভ্যালু target object এর মধ্যে পুরোপুরি কপি হয়ে যায়, যাতে original object এর কোনো পরিবর্তন target object-এ প্রভাব ফেলতে না পারে।

উদাহরণ: Deep Copy with BeanUtils

import org.apache.commons.beanutils.BeanUtils;

public class DeepCopyExample {
    public static void main(String[] args) {
        try {
            // Create source Order object
            Order sourceOrder = new Order();
            Customer sourceCustomer = new Customer();
            sourceCustomer.setName("Jane Doe");
            sourceCustomer.setEmail("jane.doe@example.com");
            sourceCustomer.setPhone("987-654-3210");

            Address sourceAddress = new Address();
            sourceAddress.setStreet("456 Oak Avenue");
            sourceAddress.setCity("Chicago");
            sourceAddress.setPostalCode("60601");

            Product sourceProduct = new Product();
            sourceProduct.setName("Tablet");
            sourceProduct.setPrice(300.00);
            sourceProduct.setQuantity(3);

            sourceOrder.setCustomer(sourceCustomer);
            sourceOrder.setShippingAddress(sourceAddress);
            sourceOrder.setProducts(Arrays.asList(sourceProduct));

            // Perform a deep copy (manual approach for nested objects)
            Order targetOrder = new Order();
            BeanUtils.copyProperties(targetOrder, sourceOrder);

            // Deep copy for nested objects manually
            targetOrder.setCustomer(new Customer());
            BeanUtils.copyProperties(targetOrder.getCustomer(), sourceOrder.getCustomer());

            targetOrder.setShippingAddress(new Address());
            BeanUtils.copyProperties(targetOrder.getShippingAddress(), sourceOrder.getShippingAddress());

            // Output the copied data
            System.out.println("Target Order Customer Name: " + targetOrder.getCustomer().getName());
            System.out.println("Target Order Shipping Address: " + targetOrder.getShippingAddress().getStreet());
            System.out.println("Target Order Product Name: " + targetOrder.getProducts().get(0).getName());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • এই উদাহরণে deep copy করতে, BeanUtils.copyProperties() এর মাধ্যমে Order অবজেক্টের প্রপার্টি কপি করা হয়েছে।
  • Nested objects (যেমন Customer এবং Address) জন্য কাস্টমভাবে deep copy করা হয়েছে, যেখানে প্রতিটি nested object-এর জন্য new instance তৈরি করে copyProperties() ব্যবহার করা হয়েছে।

সারাংশ

  • Complex Nested Structure-এ BeanUtils ব্যবহার করতে হলে সাধারণত flat properties সরাসরি কপি করা যায়, কিন্তু nested properties এর জন্য manual deep copy

প্রয়োজন হতে পারে।

  • copyProperties() মেথড এক বা একাধিক nested objects এর মধ্যে ডেটা কপি করার জন্য BeanUtils ব্যবহার করা যায়, তবে deep copy এর জন্য কাস্টম কপি লজিক প্রয়োগ করতে হয়।
  • Nested objects কপি করার ক্ষেত্রে deep copy এর মাধ্যমে, আপনি source object এর মূল ডেটাকে target object-এ পুরোপুরি স্থানান্তর করতে পারেন, যাতে পরবর্তীতে একটিতে পরিবর্তন হলে অন্যটিতে প্রভাব না পড়ে।
Content added || updated By
Promotion

Are you sure to start over?

Loading...