blob: 2c72c51f538ddf94b6f42d850833aae9befc1a08 [file] [log] [blame]
/*
* Copyright (c) 2011, 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
*/
// Contributors:
// - rbarkhouse - 27 January 2012 - 2.3.3 - Initial implementation
package org.eclipse.persistence.testing.jaxb.collections;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAnyElement;
import jakarta.xml.bind.annotation.XmlElementRef;
import jakarta.xml.bind.annotation.XmlElementRefs;
import jakarta.xml.bind.annotation.XmlElementWrapper;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.w3c.dom.Element;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class CollectionHolderWrappers {
@XmlElementWrapper()
protected List<Integer> collection1;
@XmlElementWrapper(name="collection2-wrapper")
protected List<Object> collection2;
@XmlElementWrapper(name="collection3-wrapper")
@XmlAnyElement
protected List collection3;
@XmlElementWrapper(name="collection4-wrapper")
protected List<CollectionHolderWrappers> collection4;
@XmlElementWrapper(name="collection5-wrapper")
@XmlElementRefs({@XmlElementRef(name="root"), @XmlElementRef(name="root2")})
protected List<JAXBElement<String>> collection5;
@XmlElementWrapper(name="collection6-wrapper")
protected List<CoinEnum> collection6;
@XmlElementWrapper(name="collection7-wrapper")
protected List<byte[]> collection7;
public CollectionHolderWrappers() {
}
public List<Integer> getCollection1() {
return collection1;
}
public void setCollection1(List<Integer> collection1) {
this.collection1 = collection1;
}
public List<Object> getCollection2() {
return collection2;
}
public void setCollection2(List<Object> collection2) {
this.collection2 = collection2;
}
public List getCollection3() {
return collection3;
}
public void setCollection3(List collection3) {
this.collection3 = collection3;
}
public List<CollectionHolderWrappers> getCollection4() {
return collection4;
}
public void setCollection4(List<CollectionHolderWrappers> collection4) {
this.collection4 = collection4;
}
public List<JAXBElement<String>> getCollection5() {
return collection5;
}
public void setCollection5(List<JAXBElement<String>> collection5) {
this.collection5 = collection5;
}
public List<CoinEnum> getCollection6() {
return collection6;
}
public void setCollection6(List<CoinEnum> collection6) {
this.collection6 = collection6;
}
public List<byte[]> getCollection7() {
return collection7;
}
public void setCollection7(List<byte[]> collection7) {
this.collection7 = collection7;
}
public boolean equals(Object compareObject){
if (compareObject instanceof CollectionHolderWrappers) {
CollectionHolderWrappers compareCollectionHolder = ((CollectionHolderWrappers)compareObject);
return compareCollections(collection1, compareCollectionHolder.getCollection1())
&& compareCollections(collection2, compareCollectionHolder.getCollection2())
&& compareCollections(collection3, compareCollectionHolder.getCollection3())
&& compareCollections(collection4, compareCollectionHolder.getCollection4())
&& compareCollections(collection5, compareCollectionHolder.getCollection5())
&& compareCollections(collection6, compareCollectionHolder.getCollection6())
&& compareCollections(collection7, compareCollectionHolder.getCollection7())
;
}
return false;
}
private boolean compareCollections(Collection compareList1, Collection compareList2) {
if (compareList1 == null) {
return compareList2 == null;
} else {
if (compareList2 == null) {
return false;
}
if(compareList1.size() != compareList2.size()){
return false;
}
Iterator iter1 = compareList1.iterator();
Iterator iter2 = compareList2.iterator();
while(iter1.hasNext()){
Object next1 = iter1.next();
Object next2 = iter2.next();
if(!compareObjects(next1, next2)){
return false;
}
}
return true;
}
}
private boolean compareObjects(Object obj1, Object obj2){
if(obj1 instanceof JAXBElement){
if(obj2 instanceof JAXBElement){
if(! ((JAXBElement)obj1).getName().getLocalPart().equals(((JAXBElement)obj2).getName().getLocalPart())){
return false;
}
if(! ((JAXBElement)obj1).getDeclaredType().equals(((JAXBElement)obj2).getDeclaredType())){
return false;
}
if(! ((JAXBElement)obj1).getValue().equals(((JAXBElement)obj2).getValue())){
return false;
}
return true;
}
return false;
} else if (obj1 instanceof org.w3c.dom.Element) {
if(obj2 instanceof org.w3c.dom.Element) {
return ((Element)obj1).getLocalName().equals(((Element)obj2).getLocalName());
}
return false;
} else{
if(obj1.getClass().isArray() && obj2.getClass().isArray()){
return compareArrays(obj1, obj2);
}else{
return obj1.equals(obj2);
}
}
}
protected boolean compareArrays(Object controlValue, Object testValue) {
int controlSize = Array.getLength(controlValue);
int objSize = Array.getLength(testValue);
if(controlSize != objSize){
return false;
}
for(int x=0; x<controlSize; x++) {
Object controlItem = Array.get(controlValue, x);
Object testItem = Array.get(testValue, x);
if(!controlItem.equals(testItem)){
return false;
}
}
return true;
}
}