blob: 7140f81a236a5fe2e1c1d5a7ef46311d8cbf69f4 [file] [log] [blame]
/*
* Copyright (c) 1998, 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.jpql;
import java.util.*;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.testing.models.employee.domain.*;
public class DomainObjectComparer {
Session theSession;
public boolean compareObjects(Object obj1, Object obj2) {
if ((obj1 == null) && (obj2 == null)) {
return true;
}
if ((obj1 == null) || (obj2 == null)) {
return false;
}
if ((obj1.getClass() == Vector.class) && (obj2.getClass() != Vector.class)) {
return compareObjects(obj2, (Vector)obj1);
} else if ((obj1.getClass() != Vector.class) && (obj2.getClass() == Vector.class)) {
return compareObjects(obj1, (Vector)obj2);
} else if ((obj1.getClass() == Vector.class) && (obj2.getClass() == Vector.class)) {
return compareObjects((Vector)obj1, (Vector)obj2);
} else {
return ((AbstractSession)getSession()).compareObjects(obj1, obj2);
}
}
public boolean compareObjects(Object domainObject1, Vector aVector) {
Enumeration enumtr = aVector.elements();
while (enumtr.hasMoreElements()) {
Object domainObject2 = enumtr.nextElement();
if (compareObjects(domainObject1, domainObject2)) {
return true;
}
}
return false;
}
public boolean compareObjects(Vector objects1, Vector objects2) {
boolean allMatched = true;
if (objects1.size() != objects2.size()) {
allMatched = false;
}
/*else if (objects1.isEmpty() || objects2.isEmpty()) {
allMatched = false;
}*/
Enumeration enum1 = objects1.elements();
while (enum1.hasMoreElements()) {
Object obj1 = enum1.nextElement();
if (obj1.getClass().equals(Employee.class)) {
Employee emp1 = (Employee)obj1;
Employee emp2 = findEmployeeByIdIn(emp1, objects2);
allMatched = allMatched && compareObjects(emp1, emp2);
}
if (obj1.getClass().equals(Project.class)) {
Project proj1 = (Project)obj1;
Project proj2 = findProjectByIdIn(proj1, objects2);
allMatched = allMatched && compareObjects(proj1, proj2);
}
if (obj1.getClass().equals(LargeProject.class)) {
Project proj1 = (Project)obj1;
Project proj2 = findProjectByIdIn(proj1, objects2);
allMatched = allMatched && compareObjects(proj1, proj2);
}
if (obj1.getClass().equals(PhoneNumber.class)) {
PhoneNumber phone1 = (PhoneNumber)obj1;
PhoneNumber phone2 = findPhoneNumberIn(phone1, objects2);
allMatched = allMatched && compareObjects(phone1, phone2);
}
if (obj1.getClass().equals(String.class)) {
allMatched = allMatched && (objects2.indexOf(obj1) != -1);
}
}
return allMatched;
}
public PhoneNumber findPhoneNumberIn(PhoneNumber phone1, Vector phones) {
Enumeration enumtr = phones.elements();
while (enumtr.hasMoreElements()) {
PhoneNumber pTemp = (PhoneNumber)enumtr.nextElement();
if (pTemp.getNumber().equals(phone1.getNumber())) {
if (pTemp.getAreaCode().equals(phone1.getAreaCode())) {
if (pTemp.getOwner().getId().equals(phone1.getOwner().getId())) {
return pTemp;
}
}
}
}
return null;
}
public Project findProjectByIdIn(Project project, Vector projects) {
Enumeration enumtr = projects.elements();
while (enumtr.hasMoreElements()) {
Project pTemp = (Project)enumtr.nextElement();
if (pTemp.getId().equals(project.getId())) {
return pTemp;
}
}
return null;
}
public Employee findEmployeeByIdIn(Employee emp, Vector employees) {
Enumeration enumtr = employees.elements();
while (enumtr.hasMoreElements()) {
Employee eTemp = (Employee)enumtr.nextElement();
if (eTemp.getId().equals(emp.getId())) {
return eTemp;
}
}
return null;
}
public Address findAddressByIdIn(Address addr, Vector addresses) {
Enumeration enumtr = addresses.elements();
while (enumtr.hasMoreElements()) {
Address aTemp = (Address)enumtr.nextElement();
if (aTemp.getId() == addr.getId()) {
return aTemp;
}
}
return null;
}
public Session getSession() {
return theSession;
}
public void setSession(Session theSession) {
this.theSession = theSession;
}
}