package com.opower.updater.admin.loader; import com.opower.updater.admin.Update; import java.io.IOException; import java.util.SortedSet; import java.util.TreeSet; /** * An {@link com.opower.updater.admin.loader.UpdateLoader} implementation that allows pre-processing of the updates * before applying them. * * @author felix.trepanier */ public class UpdateLoaderWithPreProcessor implements UpdateLoader { private final UpdateLoader updateLoader; private final UpdateProcessor preProcessor; /** * Construct a {@link com.opower.updater.admin.loader.UpdateLoaderWithPreProcessor} with the given * {@link com.opower.updater.admin.loader.UpdateLoader} and {@link UpdateProcessor}. * * @param updateLoader Update loader used to load the updates. * @param preProcessor The preprocessor used to pre-process each updates. */ public UpdateLoaderWithPreProcessor(UpdateLoader updateLoader, UpdateProcessor preProcessor) { this.updateLoader = updateLoader; this.preProcessor = preProcessor; } /** * {@inheritDoc} */ @Override public Update loadCreateTable(String tableName) throws IOException { return preProcessor.processUpdate(updateLoader.loadCreateTable(tableName)); } /** * {@inheritDoc} */ @Override public SortedSet<Update> loadUpdates(String tableName) throws IOException { SortedSet<Update> preProcessedUpdates = new TreeSet<Update>(Update.UPDATE_COMPARATOR); for (Update update : updateLoader.loadUpdates(tableName)) { preProcessedUpdates.add(preProcessor.processUpdate(update)); } return preProcessedUpdates; } }