[web_stories title=”true” excerpt=”false” author=”false” date=”false” archive_link=”true” archive_link_label=”” circle_size=”150″ sharp_corners=”false” image_alignment=”left” number_of_columns=”1″ number_of_stories=”5″ order=”DESC” orderby=”post_title” view=”circles” /]
In this post, we will showcase a step-by-step guide on how to detect and present distinctions between two java objects by leveraging a set of classes and interfaces provided by Apache Commons Lang.
Classes, Interfaces, and pom.xml
The classes and interfaces to be used for this post are as follows:
- org.apache.commons.lang3.builder.Diff
- org.apache.commons.lang3.builder.DiffResult
- org.apache.commons.lang3.builder.DiffBuilder
- org.apache.commons.lang3.builder.Diffable
<dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.6</version> </dependency> </dependencies>
Scenario
We have two Employee Object for our use case, and we need to list the differences between them. The list must show the affected field and the old-new (from Employee 1 to Employee 2 values.
Employee Object 1
For the Employee Object, we have the following data.
- Name = Ankit
- ID = 1
- Designation = Assistant Vice President
- Address = Mumbai
Employee Object 2
For the Employee Object, we have the following data.
- Name = Ankit
- ID = 1
- Designation = Vice President
- Address = Pune
Java Codes
Employee class
It is a Java Bean that represents an Employee Object. Two things worth highlighting in these codes.
- The class implements the Diffable interface
- The class overrides the diff method
- This is where the magic happens
import org.apache.commons.lang3.builder.DiffBuilder; import org.apache.commons.lang3.builder.DiffResult; import org.apache.commons.lang3.builder.Diffable; import org.apache.commons.lang3.builder.ToStringStyle; public class Employee implements Diffable<Employee>{ private int id; private String name; private String designation; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public DiffResult diff(Employee obj) { return new DiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE) .append("id", this.id, obj.id) .append("name", this.name, obj.name) .append("designation", this.designation, obj.designation) .append("address", this.address, obj.address) .build(); } }
DiffableDemo class
This is the main class – the entry point.
import org.apache.commons.lang3.builder.Diff; import org.apache.commons.lang3.builder.DiffResult; public class DiffableDemo { public static void main(String[] args) { Employee avpEmp = new Employee(); avpEmp.setId(1); avpEmp.setName("Ankit"); avpEmp.setAddress("Mumbai"); avpEmp.setDesignation("Assistance Vice President"); Employee vpEmp = new Employee(); vpEmp.setId(1); vpEmp.setName("Ankit"); vpEmp.setAddress("Pune"); vpEmp.setDesignation("Vice President"); DiffResult diff = avpEmp.diff(vpEmp); for(Diff<?> d: diff.getDiffs()) { System.out.println(d.getFieldName() + "= FROM[" + d.getLeft() + "] TO [" + d.getRight() + "]"); } System.out.println(); } }
This outputs:
Leave a Reply