package com.sbs.wceeconvert.migrate; import java.util.HashMap; import java.util.Map; import com.sbs.wceeconvert.Converter; import com.sbs.wceeconvert.WCEEConvertVersion; /** * The migration class contains information from converting * one WCEEConvertVersion to another, all the way up to * WCEEConvertVersion.CURRENT_VERSION. */ public final class Migration { protected WCEEConvertVersion oldVersion; protected Map migrationPatterns; /** * Formal constructor to initialize what version we are currently on * so we know how to upgrade to CURRENT_VERSION. * * @param oldVersion The version contained in the database. */ public Migration(WCEEConvertVersion oldVersion) { this.oldVersion = oldVersion; this.initVersionUpgrades(); } /** * Register the classes, versions, and upgrade advisors. */ private void initVersionUpgrades() { migrationPatterns = new HashMap(); migrationPatterns.put("0.0.0", "com.sbs.wceeconvert.migrate.MigrationPattern_0_0_0"); migrationPatterns.put("1.0.0", "com.sbs.wceeconvert.migrate.MigrationPattern_1_0_0"); } /** * Migrate the database versions. * * @param converter The converter that is converting the database. */ public void migrate(Converter converter) throws MigrationException { String patternClassName = (String)migrationPatterns.get(oldVersion.toString()); while (patternClassName != null) { try { MigrationPattern migration = (MigrationPattern)Class.forName(patternClassName).newInstance(); migration.migrate(converter); // // get the next migration pattern // patternClassName = (String)migrationPatterns.get(migration.toVersion()); } catch (ClassNotFoundException e) { throw new MigrationException(); } catch (InstantiationException e) { throw new MigrationException(e); } catch (IllegalAccessException e) { throw new MigrationException(e); } } } }