/**
* Copyright (c) 2006-2011 Floggy Open Source Group. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sourceforge.floggy.persistence.fr2243110.perclass;
import net.sourceforge.floggy.persistence.FloggyBaseTest;
import net.sourceforge.floggy.persistence.Persistable;
import net.sourceforge.floggy.persistence.PolymorphicObjectSet;
/**
* DOCUMENT ME!
*
* @author <a href="mailto:thiago.moreira@floggy.org">Thiago Moreira</a>
* @version $Revision$
*/
public class RF2243110Test extends FloggyBaseTest {
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testAbstractClassGetNewInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass2 =
new PCConcreteClass3ExtendingConcreteClass2();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass22 =
new PCConcreteClass3ExtendingConcreteClass2();
try {
manager.save(superClass);
manager.save(concreteClass2ExtendingAbstractClass);
manager.save(concreteClass3ExtendingConcreteClass2);
manager.save(concreteClass3ExtendingConcreteClass22);
PolymorphicObjectSet os =
manager.polymorphicFind(PCAbstractClassExtendingSuperClass.class, null,
false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass3ExtendingConcreteClass2 = 0;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.get(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass3ExtendingConcreteClass2.class) {
instancesOfConcreteClass3ExtendingConcreteClass2++;
}
}
assertEquals(0, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(2, instancesOfConcreteClass3ExtendingConcreteClass2);
} finally {
manager.delete(superClass);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass3ExtendingConcreteClass2);
manager.delete(concreteClass3ExtendingConcreteClass22);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testAbstractClassGetSharedInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass2 =
new PCConcreteClass3ExtendingConcreteClass2();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass22 =
new PCConcreteClass3ExtendingConcreteClass2();
try {
manager.save(superClass);
manager.save(concreteClass2ExtendingAbstractClass);
manager.save(concreteClass3ExtendingConcreteClass2);
manager.save(concreteClass3ExtendingConcreteClass22);
PolymorphicObjectSet os =
manager.polymorphicFind(PCAbstractClassExtendingSuperClass.class, null,
false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass3ExtendingConcreteClass2 = 0;
assertEquals(3, os.size());
Persistable temp = null;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.getSharedInstance(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
if (temp == null) {
temp = persistable;
} else {
assertSame(temp, persistable);
}
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass3ExtendingConcreteClass2.class) {
instancesOfConcreteClass3ExtendingConcreteClass2++;
}
}
assertEquals(0, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(2, instancesOfConcreteClass3ExtendingConcreteClass2);
} finally {
manager.delete(superClass);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass3ExtendingConcreteClass2);
manager.delete(concreteClass3ExtendingConcreteClass22);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testGetNewInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass2 =
new PCConcreteClass3ExtendingConcreteClass2();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass22 =
new PCConcreteClass3ExtendingConcreteClass2();
try {
manager.save(superClass);
manager.save(concreteClass2ExtendingAbstractClass);
manager.save(concreteClass3ExtendingConcreteClass2);
manager.save(concreteClass3ExtendingConcreteClass22);
PolymorphicObjectSet os =
manager.polymorphicFind(PCConcreteClass2ExtendingAbstractClass.class,
null, false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass3ExtendingConcreteClass2 = 0;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.get(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass3ExtendingConcreteClass2.class) {
instancesOfConcreteClass3ExtendingConcreteClass2++;
}
}
assertEquals(0, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(2, instancesOfConcreteClass3ExtendingConcreteClass2);
} finally {
manager.delete(superClass);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass3ExtendingConcreteClass2);
manager.delete(concreteClass3ExtendingConcreteClass22);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testGetSharedInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass2 =
new PCConcreteClass3ExtendingConcreteClass2();
PCConcreteClass3ExtendingConcreteClass2 concreteClass3ExtendingConcreteClass22 =
new PCConcreteClass3ExtendingConcreteClass2();
try {
manager.save(superClass);
manager.save(concreteClass2ExtendingAbstractClass);
manager.save(concreteClass3ExtendingConcreteClass2);
manager.save(concreteClass3ExtendingConcreteClass22);
PolymorphicObjectSet os =
manager.polymorphicFind(PCConcreteClass2ExtendingAbstractClass.class,
null, false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass3ExtendingConcreteClass2 = 0;
assertEquals(3, os.size());
Persistable temp = null;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.getSharedInstance(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
if (temp == null) {
temp = persistable;
} else {
assertSame(temp, persistable);
}
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass3ExtendingConcreteClass2.class) {
instancesOfConcreteClass3ExtendingConcreteClass2++;
}
}
assertEquals(0, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(2, instancesOfConcreteClass3ExtendingConcreteClass2);
} finally {
manager.delete(superClass);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass3ExtendingConcreteClass2);
manager.delete(concreteClass3ExtendingConcreteClass22);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testLeafClassGetNewInstance() throws Exception {
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass =
new PCConcreteClass4ExtendingSuperClass();
int instancesOfConcreteClass4ExtendingSuperClass = 0;
try {
manager.save(concreteClass4ExtendingSuperClass);
PolymorphicObjectSet os =
manager.polymorphicFind(PCConcreteClass4ExtendingSuperClass.class,
null, false);
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.get(i);
if (persistable.getClass() == PCConcreteClass4ExtendingSuperClass.class) {
instancesOfConcreteClass4ExtendingSuperClass++;
}
}
assertEquals(1, instancesOfConcreteClass4ExtendingSuperClass);
} finally {
manager.delete(concreteClass4ExtendingSuperClass);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testLeafClassGetSharedInstance() throws Exception {
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass =
new PCConcreteClass4ExtendingSuperClass();
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass2 =
new PCConcreteClass4ExtendingSuperClass();
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass3 =
new PCConcreteClass4ExtendingSuperClass();
int instancesOfConcreteClass4ExtendingSuperClass = 0;
try {
manager.save(concreteClass4ExtendingSuperClass);
manager.save(concreteClass4ExtendingSuperClass2);
manager.save(concreteClass4ExtendingSuperClass3);
PolymorphicObjectSet os =
manager.polymorphicFind(PCConcreteClass4ExtendingSuperClass.class,
null, false);
Persistable temp = null;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.getSharedInstance(i);
if (persistable.getClass() == PCConcreteClass4ExtendingSuperClass.class) {
instancesOfConcreteClass4ExtendingSuperClass++;
if (temp == null) {
temp = persistable;
} else {
assertSame(temp, persistable);
}
} else {
fail("Only " + PCConcreteClass4ExtendingSuperClass.class.getName()
+ " instances should be returned." + " Returned type: "
+ persistable.getClass().getName());
}
}
assertEquals(3, instancesOfConcreteClass4ExtendingSuperClass);
} finally {
manager.delete(concreteClass4ExtendingSuperClass);
manager.delete(concreteClass4ExtendingSuperClass2);
manager.delete(concreteClass4ExtendingSuperClass3);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testRootClassGetNewInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass =
new PCConcreteClass4ExtendingSuperClass();
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass2 =
new PCConcreteClass4ExtendingSuperClass();
try {
manager.save(superClass);
manager.save(concreteClass2ExtendingAbstractClass);
manager.save(concreteClass4ExtendingSuperClass);
manager.save(concreteClass4ExtendingSuperClass2);
PolymorphicObjectSet os =
manager.polymorphicFind(PCSuperClass.class, null, false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass4ExtendingSuperClass = 0;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.get(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass4ExtendingSuperClass.class) {
instancesOfConcreteClass4ExtendingSuperClass++;
}
}
assertEquals(1, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(2, instancesOfConcreteClass4ExtendingSuperClass);
} finally {
manager.delete(superClass);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass4ExtendingSuperClass);
manager.delete(concreteClass4ExtendingSuperClass2);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testRootClassGetSharedInstance() throws Exception {
PCSuperClass superClass = new PCSuperClass();
PCSuperClass superClass2 = new PCSuperClass();
PCSuperClass superClass3 = new PCSuperClass();
PCConcreteClass4ExtendingSuperClass concreteClass4ExtendingSuperClass =
new PCConcreteClass4ExtendingSuperClass();
PCConcreteClass2ExtendingAbstractClass concreteClass2ExtendingAbstractClass =
new PCConcreteClass2ExtendingAbstractClass();
try {
manager.save(superClass);
manager.save(superClass2);
manager.save(superClass3);
manager.save(concreteClass4ExtendingSuperClass);
manager.save(concreteClass2ExtendingAbstractClass);
PolymorphicObjectSet os =
manager.polymorphicFind(PCSuperClass.class, null, false);
int instancesOfSuperClass = 0;
int instancesOfConcreteClass2ExtendingAbstractClass = 0;
int instancesOfConcreteClass4ExtendingSuperClass = 0;
assertEquals(5, os.size());
Persistable temp = null;
for (int i = 0; i < os.size(); i++) {
PCSuperClass persistable = (PCSuperClass) os.getSharedInstance(i);
if (persistable.getClass() == PCSuperClass.class) {
instancesOfSuperClass++;
if (temp == null) {
temp = persistable;
} else {
assertSame(temp, persistable);
}
}
if (persistable.getClass() == PCConcreteClass2ExtendingAbstractClass.class) {
instancesOfConcreteClass2ExtendingAbstractClass++;
}
if (persistable.getClass() == PCConcreteClass4ExtendingSuperClass.class) {
instancesOfConcreteClass4ExtendingSuperClass++;
}
}
assertEquals(3, instancesOfSuperClass);
assertEquals(1, instancesOfConcreteClass2ExtendingAbstractClass);
assertEquals(1, instancesOfConcreteClass4ExtendingSuperClass);
} finally {
manager.delete(superClass);
manager.delete(superClass2);
manager.delete(superClass3);
manager.delete(concreteClass2ExtendingAbstractClass);
manager.delete(concreteClass4ExtendingSuperClass);
}
}
}