package org.jvnet.jaxb2_commons.lang.builder; import java.util.Iterator; import javax.xml.bind.JAXBElement; import org.ow2.easywsdl.u.builder.EqualsBuilder; import org.jvnet.jaxb2_commons.lang.Equals; public class JAXBEqualsBuilder extends EqualsBuilder { @Override public EqualsBuilder append(Object lhs, Object rhs) { if (!isEquals()) { return this; } if (lhs == rhs) { return this; } if (lhs == null || rhs == null) { this.setEquals(false); return this; } final Class lhsClass = lhs.getClass(); if (lhsClass.isArray()) { super.append(lhs, rhs); } else { if (lhs instanceof Iterable<?> && rhs instanceof Iterable<?>) { append((Iterable<?>) lhs, (Iterable<?>) rhs); } else if (lhs instanceof JAXBElement<?> && rhs instanceof JAXBElement<?>) { append((JAXBElement<?>) lhs, (JAXBElement<?>) rhs); } else if (lhs instanceof Equals) { ((Equals) lhs).equals(rhs, this); } else { setEquals(lhs.equals(rhs)); } } return this; } public EqualsBuilder append(Iterable<?> lhs, Iterable<?> rhs) { if (!isEquals()) { return this; } if (lhs == rhs) { return this; } if (lhs == null || rhs == null) { this.setEquals(false); return this; } final Iterator<?> e1 = lhs.iterator(); final Iterator<?> e2 = rhs.iterator(); while (e1.hasNext() && e2.hasNext() && isEquals()) { append(e1.next(), e2.next()); } if (e1.hasNext() || e2.hasNext()) setEquals(false); return this; } public EqualsBuilder append(JAXBElement<?> lhs, JAXBElement<?> rhs) { if (!isEquals()) { return this; } if (lhs == rhs) { return this; } if (lhs == null || rhs == null) { this.setEquals(false); return this; } append(lhs.getName(), rhs.getName()) // .append(lhs.getScope(), rhs.getScope()) .append(lhs.getValue(), rhs.getValue()); return this; } }