/**
* 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.fr2852335.single;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.TimeZone;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.microemu.MIDletBridge;
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.RMSMemoryMicroEmulator;
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.impl.migration.JoinedStrategyEnumerationImpl;
import net.sourceforge.floggy.persistence.impl.migration.SingleStrategyEnumerationImpl;
import net.sourceforge.floggy.persistence.migration.Enumeration;
import net.sourceforge.floggy.persistence.migration.MigrationManager;
/**
* DOCUMENT ME!
*
* @author <a href="mailto:thiago.moreira@floggy.org">Thiago Moreira</a>
* @version $Revision$
*/
public class FR2852335MigrationTest extends FloggyBaseTest {
private static final Calendar checkpoint = Calendar.getInstance();
private static final char classification = 'T';
private static final String name = "Ubatuba";
private static final Date birthDate = new Date(123456782);
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 testFind() throws Exception {
ConcreteSuperClass csc1 = new ConcreteSuperClass();
csc1.setName(name);
ConcreteSuperClass csc2 = new ConcreteSuperClass();
csc2.setName(name);
ConcreteSuperClass csc3 = new ConcreteSuperClass();
csc3.setName(name);
try {
manager.save(csc1);
manager.save(csc2);
manager.save(csc3);
ObjectSet os = manager.find(ConcreteSuperClass.class, null, null);
assertEquals(4, os.size());
assertEquals(ConcreteSuperClass.class, os.get(0).getClass());
} finally {
manager.delete(csc1);
manager.delete(csc2);
manager.delete(csc3);
}
}
/**
* DOCUMENT ME!
*/
public void testFindUpdatedToAbstractJoinedClass() {
PersistableMetadata rmsBasedMetadata =
PersistableMetadataManager.getRMSBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
PersistableMetadata classBasedMetadata =
PersistableMetadataManager.getClassBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.JOINED_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
try {
manager.find(CSCOfAbstractJoinedStrategy.class, null, null);
fail(
"Must throw a FloggyException because now the class implements the SingleStrategy startegy");
} catch (Exception ex) {
assertEquals(FloggyException.class, ex.getClass());
}
}
/**
* DOCUMENT ME!
*/
public void testFindUpdatedToConcreteJoinedClass() {
PersistableMetadata rmsBasedMetadata =
PersistableMetadataManager.getRMSBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
PersistableMetadata classBasedMetadata =
PersistableMetadataManager.getClassBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.JOINED_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
try {
manager.find(CSCOfConcreteJoinedStrategy.class, null, null);
fail(
"Must throw a FloggyException because now the class implements the SingleStrategy startegy");
} catch (Exception ex) {
assertEquals(FloggyException.class, ex.getClass());
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationCSCOfConcreteSubClass() throws Exception {
MigrationManager um = MigrationManager.getInstance();
Enumeration enumeration = um.start(CSCOfConcreteSubClass.class, null);
assertEquals(1, enumeration.getSize());
assertEquals(SingleStrategyEnumerationImpl.class, enumeration.getClass());
try {
while (enumeration.hasMoreElements()) {
Hashtable fields = enumeration.nextElement();
assertEquals(classification,
((Character) fields.get("classification")).charValue());
assertEquals(name, fields.get("name"));
assertEquals(checkpoint.getTime(), fields.get("start"));
}
} finally {
um.finish(CSCOfConcreteSubClass.class);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationCSCOfConcreteSuperClass() throws Exception {
MigrationManager um = MigrationManager.getInstance();
Enumeration enumeration = um.start(CSCOfConcreteSuperClass.class, null);
assertEquals(1, enumeration.getSize());
assertEquals(SingleStrategyEnumerationImpl.class, enumeration.getClass());
try {
while (enumeration.hasMoreElements()) {
Hashtable fields = enumeration.nextElement();
assertEquals(classification,
((Character) fields.get("classification")).charValue());
assertEquals(name, fields.get("name"));
}
} finally {
um.finish(CSCOfConcreteSuperClass.class);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationConcreteSubClassOfAbstractSuperClass()
throws Exception {
MigrationManager um = MigrationManager.getInstance();
Enumeration enumeration = um.start(CSCOfAbstractSuperClass.class, null);
assertEquals(1, enumeration.getSize());
assertEquals(SingleStrategyEnumerationImpl.class, enumeration.getClass());
try {
while (enumeration.hasMoreElements()) {
Hashtable fields = enumeration.nextElement();
assertEquals(checkpoint, fields.get("checkpoint"));
assertEquals(name, fields.get("name"));
}
} finally {
um.finish(CSCOfAbstractSuperClass.class);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationOfUpdatedToAbstractJoinedClass()
throws Exception {
PersistableMetadata rmsBasedMetadata =
PersistableMetadataManager.getRMSBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
PersistableMetadata classBasedMetadata =
PersistableMetadataManager.getClassBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.JOINED_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
MigrationManager mm = MigrationManager.getInstance();
Enumeration enumeration = mm.start(CSCOfAbstractJoinedStrategy.class, null);
assertEquals(JoinedStrategyEnumerationImpl.class, enumeration.getClass());
try {
assertEquals(1, enumeration.getSize());
while (enumeration.hasMoreElements()) {
Hashtable data = enumeration.nextElement();
assertEquals(name, data.get("name"));
assertEquals(birthDate, data.get("birthDate"));
}
} finally {
mm.finish(CSCOfAbstractJoinedStrategy.class);
}
rmsBasedMetadata = PersistableMetadataManager.getRMSBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
classBasedMetadata = PersistableMetadataManager.getClassBasedMetadata(CSCOfAbstractJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationOfUpdatedToConcreteJoinedClass()
throws Exception {
PersistableMetadata rmsBasedMetadata =
PersistableMetadataManager.getRMSBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
PersistableMetadata classBasedMetadata =
PersistableMetadataManager.getClassBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.JOINED_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
MigrationManager mm = MigrationManager.getInstance();
Enumeration enumeration = mm.start(CSCOfConcreteJoinedStrategy.class, null);
assertEquals(JoinedStrategyEnumerationImpl.class, enumeration.getClass());
try {
assertEquals(1, enumeration.getSize());
while (enumeration.hasMoreElements()) {
Hashtable data = enumeration.nextElement();
assertEquals(name, data.get("name"));
assertEquals(birthDate, data.get("birthDate"));
}
} finally {
mm.finish(CSCOfConcreteJoinedStrategy.class);
}
rmsBasedMetadata = PersistableMetadataManager.getRMSBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
classBasedMetadata = PersistableMetadataManager.getClassBasedMetadata(CSCOfConcreteJoinedStrategy.class
.getName());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
rmsBasedMetadata.getPersistableStrategy());
assertEquals(PersistableMetadata.SINGLE_STRATEGY,
classBasedMetadata.getPersistableStrategy());
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testMigrationUpdateConcreteSuperClass() throws Exception {
ConcreteSuperClass csc = new ConcreteSuperClass();
csc.setName(name);
manager.save(csc);
ConcreteSuperClass csc2 = new ConcreteSuperClass();
csc2.setName(name);
manager.save(csc2);
MigrationManager um = MigrationManager.getInstance();
Enumeration enumeration = um.start(ConcreteSuperClass.class, null);
assertEquals(3, enumeration.getSize());
assertEquals(SingleStrategyEnumerationImpl.class, enumeration.getClass());
try {
while (enumeration.hasMoreElements()) {
Hashtable fields = enumeration.nextElement();
assertEquals(name, fields.get("name"));
csc = new ConcreteSuperClass();
csc.setName((String) fields.get("name"));
enumeration.update(csc);
}
} finally {
um.finish(ConcreteSuperClass.class);
}
ObjectSet os = manager.find(ConcreteSuperClass.class, null, null);
assertEquals(3, os.size());
for (int i = 0; i < os.size(); i++) {
csc = (ConcreteSuperClass) os.get(i);
assertEquals(name, csc.getName());
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void setUp() throws Exception {
emulator = MIDletBridge.getMicroEmulator();
FileUtils.forceMkdir(new File("target/fr2852335/rms/1.4.0/single"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/FloggyProperties.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/FloggyProperties.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/AbstractSuperClass-1688916957.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/AbstractSuperClass-1688916957.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/ConcreteSuperClass1629449926.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/ConcreteSuperClass1629449926.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/AbstractJoinedStrategy1339113538.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/AbstractJoinedStrategy1339113538.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/CSCOfAbstractJoinedStrategy-2212.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/CSCOfAbstractJoinedStrategy-2212.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/ConcreteJoinedStrategy-878479003.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/ConcreteJoinedStrategy-878479003.rms"));
IOUtils.copy(new FileInputStream(
"src/test/rms/1.4.0/single/CSCOfConcreteJoinedStrategy18561.rms"),
new FileOutputStream(
"target/fr2852335/rms/1.4.0/single/CSCOfConcreteJoinedStrategy18561.rms"));
MIDletBridge.setMicroEmulator(new RMSMemoryMicroEmulator(
"target/fr2852335/rms/1.4.0/single"));
PersistableMetadataManager.init();
RecordStoreManager.reset();
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void tearDown() throws Exception {
MIDletBridge.setMicroEmulator(emulator);
PersistableMetadataManager.init();
}
}