| /* |
| * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| package org.eclipse.persistence.testing.jaxb.xmlelementref.nills; |
| |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import jakarta.xml.bind.JAXBElement; |
| import jakarta.xml.bind.annotation.XmlAttribute; |
| import jakarta.xml.bind.annotation.XmlElementRef; |
| import jakarta.xml.bind.annotation.XmlRootElement; |
| |
| @XmlRootElement |
| public class Employee { |
| |
| @XmlElementRef(name = "address") |
| public JAXBElement<Address> address; |
| |
| @XmlElementRef(name = "task") |
| public List<JAXBElement<Task>> tasks; |
| |
| static class Task { |
| @XmlAttribute |
| Integer id; |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (!(obj instanceof Task)) { |
| return false; |
| } |
| Task t = (Task) obj; |
| return t.id.equals(this.id); |
| } |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (!(obj instanceof Employee)) { |
| return false; |
| } |
| Employee e = (Employee) obj; |
| if (!isEqual(e.address, this.address)) { |
| return false; |
| } |
| if (e.tasks.size() == this.tasks.size()) { |
| Iterator<JAXBElement<Task>> i = this.tasks.iterator(); |
| Iterator<JAXBElement<Task>> j = e.tasks.iterator(); |
| while (i.hasNext()) { |
| if (!isEqual(i.next(), j.next())) { |
| return false; |
| } |
| } |
| } else { |
| return false; |
| } |
| return true; |
| } |
| |
| private boolean isEqual(JAXBElement<?> e1, JAXBElement<?> e2) { |
| return e1.getName().equals(e2.getName()) && |
| e1.getDeclaredType().equals(e2.getDeclaredType()) && |
| (e1.isNil() == e2.isNil()) && |
| e1.getValue().equals(e2.getValue()); |
| } |
| |
| } |