package org.eclipse.persistence.testing.tests.transparentindirection; | |
import org.eclipse.persistence.testing.framework.*; | |
import org.eclipse.persistence.testing.models.transparentindirection.*; | |
import org.eclipse.persistence.descriptors.ClassDescriptor; | |
import org.eclipse.persistence.indirection.IndirectList; | |
import org.eclipse.persistence.indirection.IndirectSet; | |
import org.eclipse.persistence.indirection.IndirectMap; | |
import org.eclipse.persistence.indirection.ValueHolder; | |
import org.eclipse.persistence.internal.helper.Helper; | |
import org.eclipse.persistence.internal.indirection.IndirectionPolicy; | |
import org.eclipse.persistence.mappings.ForeignReferenceMapping; | |
/** | |
* Test indirection functionality when setting an indirect container's | |
* valueholder to a new ValueHolder. | |
* Bug 345495 | |
*/ | |
public class NullDelegateInValueHolderTest extends TestCase { | |
protected Class indirectCollectionClass; | |
protected AbstractOrder testOrder; | |
public NullDelegateInValueHolderTest(Class indirectCollectionClass) { | |
super(); | |
this.indirectCollectionClass = indirectCollectionClass; | |
setDescription("NullDelegateInValueHolderTest: " + Helper.getShortClassName(this.indirectCollectionClass)); | |
} | |
public void setup() { | |
String customerName = "ACME, Inc."; | |
if (indirectCollectionClass.equals(IndirectList.class)) { | |
testOrder = new Order(customerName); | |
} else if (indirectCollectionClass.equals(IndirectMap.class)) { | |
testOrder = new MappedOrder(customerName); | |
} else if (indirectCollectionClass.equals(IndirectSet.class)) { | |
testOrder = new SetOrder(customerName); | |
} | |
ClassDescriptor descriptor = getSession().getDescriptor(testOrder); | |
ForeignReferenceMapping mapping = (ForeignReferenceMapping) descriptor.getMappingForAttributeName("salesReps"); | |
IndirectionPolicy policy = mapping.getIndirectionPolicy(); | |
// replace indirect container's valueholder with a new ValueHolder instance | |
mapping.setAttributeValueInObject(testOrder, policy.buildIndirectObject(new ValueHolder())); | |
} | |
public void test() { | |
int numberOfObjects = -1; | |
try { | |
numberOfObjects = testOrder.getNumberOfSalesReps(); | |
} catch (Exception e) { | |
throw new TestErrorException("Error retrieving number of sales reps from order " + testOrder, e); | |
} | |
if (numberOfObjects != 0) { | |
throwError("Number of sales reps != 0 :" + numberOfObjects); | |
} | |
} | |
} |