/** * 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.fr2422928; import java.util.Calendar; import java.util.Date; import java.util.Hashtable; import java.util.TimeZone; import java.util.Vector; import javax.microedition.rms.RecordStore; import org.microemu.MicroEmulator; import net.sourceforge.floggy.persistence.FloggyBaseTest; import net.sourceforge.floggy.persistence.FloggyException; import net.sourceforge.floggy.persistence.ObjectSet; import net.sourceforge.floggy.persistence.beans.Person; import net.sourceforge.floggy.persistence.beans.animals.Bird; import net.sourceforge.floggy.persistence.beans.animals.Falcon; import net.sourceforge.floggy.persistence.impl.PersistableMetadata; import net.sourceforge.floggy.persistence.impl.PersistableMetadataManager; import net.sourceforge.floggy.persistence.impl.RecordStoreManager; import net.sourceforge.floggy.persistence.migration.Enumeration; import net.sourceforge.floggy.persistence.migration.FieldPersistableInfo; import net.sourceforge.floggy.persistence.migration.MigrationManager; /** * DOCUMENT ME! * * @author <a href="mailto:thiago.moreira@floggy.org">Thiago Moreira</a> * @version $Revision$ */ public class FR2422928Test extends FloggyBaseTest { private static final Calendar checkpoint = Calendar.getInstance(); static { TimeZone zone = TimeZone.getTimeZone("America/Sao_Paulo"); checkpoint.setTimeZone(zone); checkpoint.setTimeInMillis(1234567890); } /** * DOCUMENT ME! */ protected MicroEmulator emulator; /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testAbstractInheritance() throws Exception { Date creationDate = new Date(123456789); AbstractSuperClass asc = new ConcreteChildClass(); asc.setCreationDate(creationDate); manager.save(asc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(ConcreteChildClass.class, null); try { while (enumeration.hasMoreElements()) { Hashtable data = (Hashtable) enumeration.nextElement(); assertEquals(creationDate, data.get("creationDate")); assertEquals(new Vector(), data.get("dynamicFields")); } } finally { um.finish(ConcreteChildClass.class); manager.delete(asc); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testAbstractInheritanceDelete() throws Exception { AbstractSuperClass asc = new ConcreteChildClass(); asc.setCreationDate(new Date()); manager.save(asc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(ConcreteChildClass.class, null); try { while (enumeration.hasMoreElements()) { enumeration.nextElement(); enumeration.delete(); } ObjectSet os = manager.find(ConcreteChildClass.class, null, null); assertEquals(0, os.size()); PersistableMetadata metadata = PersistableMetadataManager.getClassBasedMetadata(AbstractSuperClass.class .getName()); RecordStore rs = RecordStoreManager.getRecordStore(metadata.getRecordStoreName(), metadata); assertEquals(0, rs.getNumRecords()); } finally { um.finish(ConcreteChildClass.class); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testAbstractInheritanceUpdate() throws Exception { AbstractSuperClass asc = new ConcreteChildClass(); asc.setCreationDate(new Date()); int id = manager.save(asc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(ConcreteChildClass.class, null); try { while (enumeration.hasMoreElements()) { enumeration.nextElement(); asc = new ConcreteChildClass(); int tempId = enumeration.update(asc); assertEquals(id, tempId); } ObjectSet os = manager.find(ConcreteChildClass.class, null, null); assertEquals(1, os.size()); PersistableMetadata metadata = PersistableMetadataManager.getClassBasedMetadata(AbstractSuperClass.class .getName()); RecordStore rs = RecordStoreManager.getRecordStore(metadata.getRecordStoreName(), metadata); assertEquals(1, rs.getNumRecords()); } finally { um.finish(ConcreteChildClass.class); manager.delete(asc); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testDoubleCalltoNextElement() throws Exception { Bird bird1 = new Bird(); bird1.setColor("green"); Bird bird2 = new Bird(); bird2.setColor("yellow"); manager.save(bird1); manager.save(bird2); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(Bird.class, null); try { enumeration.nextElement(); enumeration.nextElement(); fail("Must throw a FloggyException"); } catch (Exception ex) { assertEquals(ex.getClass(), FloggyException.class); } finally { manager.delete(bird1); manager.delete(bird2); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testInheritanceRead() throws Exception { String name = "Floggy"; int age = 23; ChildClass cc = new ChildClass(); cc.setAge(age); cc.setName(name); manager.save(cc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(ChildClass.class, null); try { while (enumeration.hasMoreElements()) { Hashtable data = (Hashtable) enumeration.nextElement(); assertEquals(name, data.get("name")); assertEquals(new Integer(age), data.get("age")); } } finally { um.finish(ChildClass.class); manager.delete(cc); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testIterationMode() throws Exception { MigrationManager um = MigrationManager.getInstance(); Hashtable properties = new Hashtable(); Freezed freezed = new Freezed(); freezed.setNested(new Freezed()); try { manager.save(freezed); properties.put(MigrationManager.ITERATION_MODE, Boolean.TRUE); Enumeration enumeration = um.start(Freezed.class, properties); assertEquals(2, enumeration.getSize()); while (enumeration.hasMoreElements()) { assertNotNull(enumeration.nextElement()); } } finally { manager.delete(freezed); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testLazyTrue() throws Exception { String color = "white"; Bird falcon = new Falcon(); falcon.setColor(color); Person person = new Person(); person.setX(falcon); manager.save(person); MigrationManager um = MigrationManager.getInstance(); Hashtable properties = new Hashtable(); properties.put(MigrationManager.LAZY_LOAD, Boolean.TRUE); Enumeration enumeration = um.start(Person.class, properties); try { while (enumeration.hasMoreElements()) { Hashtable data = (Hashtable) enumeration.nextElement(); assertNull(data.get("x")); } } finally { um.finish(Person.class); manager.delete(person); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testPersistableFielded() throws Exception { String color = "blue"; Date now = new Date(); Bird bird = new Bird(); bird.setColor(color); PersistableFieldedClass pfc = new PersistableFieldedClass(); pfc.setBird(bird); pfc.setCreationDate(now); manager.save(pfc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(PersistableFieldedClass.class, null); try { while (enumeration.hasMoreElements()) { Hashtable data = (Hashtable) enumeration.nextElement(); FieldPersistableInfo field = (FieldPersistableInfo) data.get("bird"); String className = field.getClassName(); Bird b = (Bird) Class.forName(className).newInstance(); manager.load(b, field.getId()); assertEquals(color, b.getColor()); } } finally { um.finish(PersistableFieldedClass.class); manager.delete(pfc); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public void testPersistableSubclassedField() throws Exception { String color = "blue"; Date now = new Date(); Bird bird = new Falcon(); bird.setColor(color); PersistableFieldedClass pfc = new PersistableFieldedClass(); pfc.setBird(bird); pfc.setCreationDate(now); manager.save(pfc); MigrationManager um = MigrationManager.getInstance(); Enumeration enumeration = um.start(PersistableFieldedClass.class, null); try { while (enumeration.hasMoreElements()) { Hashtable data = (Hashtable) enumeration.nextElement(); FieldPersistableInfo field = (FieldPersistableInfo) data.get("bird"); Bird b = (Bird) Class.forName(field.getClassName()).newInstance(); manager.load(b, field.getId()); assertEquals(color, b.getColor()); enumeration.delete(); } } finally { um.finish(PersistableFieldedClass.class); } } }