/******************************************************************************* * Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * 08/15/2008-1.0.1 Chris Delahunt * - 237545: List attribute types on OneToMany using @OrderBy does not work with attribute change tracking ******************************************************************************/ package org.eclipse.persistence.testing.tests.distributedcache; import org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy; import org.eclipse.persistence.sessions.Project; import org.eclipse.persistence.sessions.UnitOfWork; import org.eclipse.persistence.testing.models.employee.domain.Child; import org.eclipse.persistence.testing.models.employee.domain.Employee; import org.eclipse.persistence.testing.models.employee.relational.EmployeeProject; import java.util.Collection; import java.util.Iterator; //Bugs 4458089 & 4454532 //adds one to the collection public class OrderedListMergeTest extends DistributedCacheMergeTest { public OrderedListMergeTest(){ super(); } protected void modifyCollection(UnitOfWork uow, Object objectToModify) { Child newChildWC = (Child)uow.registerNewObject(newItemForCollection()); ((Employee)objectToModify).children.add(newChildWC); newChildWC.parent = (Employee)objectToModify; } protected int getCollectionSize(Object rootObject) { return ((Employee)rootObject).children.size(); } protected Object buildOriginalObject() { Employee emp = new Employee(); emp.setFirstName("Sally"); emp.setLastName("Hamilton"); emp.setFemale(); java.util.Vector children = new java.util.Vector(); java.util.Calendar cal =java.util.Calendar.getInstance(); Child child = new Child(); child.setFirstName("Sarah"); child.setLastName("Hamilton"); cal.set(2005,8,8); child.setBirthday( new java.util.Date(cal.getTimeInMillis()) ); child.setGender("Female"); child.setParent(emp); children.add(child); child = new Child(); child.setFirstName("Billy"); child.setLastName("Hamilton"); cal.set(2006,8,8); child.setBirthday( new java.util.Date(cal.getTimeInMillis()) ); child.setGender("Male"); child.setParent( emp ); children.add(child); child = new Child(); child.setFirstName("Samantha"); child.setLastName("Hamilton"); cal.set(2007,8,8); child.setBirthday(new java.util.Date(cal.getTimeInMillis()) ); child.setGender("Female"); child.setParent(emp); children.add(child); emp.children = children; return emp; } protected Object newItemForCollection() { Child child = new Child(); child.firstName = "Susy"; child.lastName = "Hamilton"; child.birthday = new java.util.Date(System.currentTimeMillis()); child.gender = "Female"; return child; } protected Project getNewProject() { Project empProject = new EmployeeProject(); empProject.getDescriptor(Employee.class).setObjectChangePolicy(new AttributeChangeTrackingPolicy()); return empProject; } protected boolean compareObjectsCollections(Object object1, Object object2){ if ( getCollectionSize(object1)!=getCollectionSize(object2) ){ return false; } return compareCollections( ((Employee)object1).children, ((Employee)object2).children ); } protected boolean compareCollections(Collection col1, Collection col2){ boolean comparison=true; Iterator i1 = col1.iterator(); Iterator i2 = col2.iterator(); while (comparison && i1.hasNext()){ Object o = i1.next(); comparison = o.equals(i2.next()); } return comparison; } }