/* * Copyright (c) 2010, SQL Power Group Inc. */ package ca.sqlpower.dao.upgrade; import java.util.ArrayList; import ca.sqlpower.dao.SPUpgradePersister; public abstract class AbstractUpgradePersisterManager implements UpgradePersisterManager { private ArrayList<SPUpgradePersister> upgradePersisters = new ArrayList<SPUpgradePersister>(); /** * Registers an upgrade persister that can take persist calls from the * repository of the form of the old version and convert them to persist * calls of the repository at the next version. In order for the upgrade * persister to be properly registered there must be an upgrade persister at * the previous version or the old version must be the 0th version. * * @param oldVersion * The version to upgrade persist calls from. * @param upgradePersister * An upgrade persister that can convert persist calls from a * server at repository version oldVersion to the repository * version of oldVersion + 1. * @throws IllegalArgumentException * If the oldVersion is not equal to 0 or there is no persister * currently registered at oldVersion -1 or if a persister is * already registered for this version. */ protected void registerUpgradePersister(int oldVersion, SPUpgradePersister upgradePersister) { if (oldVersion < upgradePersisters.size()) throw new IllegalArgumentException( "A persister is already registered to upgrade repositories from version " + oldVersion); if (oldVersion == 0) { upgradePersisters.add(oldVersion, upgradePersister); } else if (oldVersion == upgradePersisters.size()) { upgradePersisters.add(oldVersion, upgradePersister); upgradePersisters.get(oldVersion - 1).setNextPersister(upgradePersister, true); } else { throw new IllegalArgumentException("There is no persister at revision " + (oldVersion - 1) + " to chain this persister to."); } } @Override public SPUpgradePersister getUpgradePersister(int version) { if (version >= getStateVersion()) { return null; } else { return upgradePersisters.get(version); } } }