package migration; import data.source.ModSource; import data.target.ModTarget; import etl.Extractor; import etl.Loader; import etl.Transformer; import utils.DataStorer; import utils.DataTransformer; import utils.StatementPreparerExtractor; import utils.StatementPreparerLoader; import java.sql.Connection; import java.sql.Date; import java.util.ArrayList; import java.util.List; public class ModMigration extends ETL { public ModMigration(final Connection source, final Connection target) { super(source, target); } @Override protected List extract() { final DataStorer dataStorer = (resultSet) -> { final var extractedData = new ArrayList(); while (resultSet.next()) { extractedData.add(new ModSource( resultSet.getInt("modId"), resultSet.getString("name"), resultSet.getDate("installationDate").toLocalDate(), resultSet.getBlob("binary") )); } return extractedData; }; final var sql = "select * from `mod`;"; final StatementPreparerExtractor statementPreparer = (preparedStatement) -> {}; return new Extractor<>(super.source, dataStorer, statementPreparer, sql).doExtract(); } @Override protected List transform(final List extractedData) { final DataTransformer transformer = (dataset) -> new ModTarget( dataset.getModId(), dataset.getName(), dataset.getInstallationDate(), dataset.getBinary() ); return new Transformer<>(transformer, extractedData).doTransform(); } @Override protected void load(final List transformedData) { final StatementPreparerLoader statementPreparerLoader = (preparedStatement, data) -> { preparedStatement.setInt(1, data.getModId()); preparedStatement.setString(2, data.getName()); preparedStatement.setDate(3, Date.valueOf(data.getModInstallationDate())); preparedStatement.setBinaryStream(4, data.getModBinary().getBinaryStream()); }; final var sql = "insert into \"mod\" values (?, ?, ?, ?)"; new Loader<>(super.target, statementPreparerLoader, transformedData, sql).doLoad(); } }