package org.jboss.aerogear.unifiedpush.migrator;
import liquibase.change.custom.CustomTaskChange;
import liquibase.database.Database;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.CustomChangeException;
import liquibase.exception.SetupException;
import liquibase.exception.ValidationErrors;
import liquibase.resource.ResourceAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class GetRidOfApiKeysMigration implements CustomTaskChange {
private static class InstallationData {
private String installationId;
private String variantId;
private InstallationData(String installationId, String variantId) {
this.installationId = installationId;
this.variantId = variantId;
}
}
@Override
public void execute(Database database) throws CustomChangeException {
Connection conn = ((JdbcConnection) (database.getConnection())).getWrappedConnection();
try {
conn.setAutoCommit(false);
List<InstallationData> list = new ArrayList<>();
String query = "select installation.id as installation_id," +
" installation.variant_id as installation_variant_id," +
" variant.id as variant_id," +
" variant.api_key as variant_api_key" +
" from installation join variant on installation.variant_id = variant.api_key";
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
String installationId = rs.getString("installation_id");
String installationVariantId = rs.getString("installation_variant_id");
String variantId = rs.getString("variant_id");
String variantApiKey = rs.getString("variant_api_key");
list.add(new InstallationData(installationId,variantId));
}
String update = "update installation" +
" set variant_id = ?" +
" where id = ?";
PreparedStatement updateInstallationsStatement = conn.prepareStatement(update);
for (InstallationData data: list) {
updateInstallationsStatement.setString(1, data.variantId);
updateInstallationsStatement.setString(2, data.installationId);
updateInstallationsStatement.executeUpdate();
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public String getConfirmationMessage() {
return null;
}
@Override
public void setUp() throws SetupException {
}
@Override
public void setFileOpener(ResourceAccessor resourceAccessor) {
}
@Override
public ValidationErrors validate(Database database) {
return null;
}
}