ProgrammableLiquibase.java

/*
 * Copyright 2026 Global Crop Diversity Trust
 * Licensed under the Apache License, Version 2.0
 * See LICENSE file in project root folder or http://www.apache.org/licenses/LICENSE-2.0
 */

package org.gringlobal.custom.liquibase;

import java.sql.Connection;

import liquibase.Liquibase;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.exception.LiquibaseException;
import liquibase.integration.spring.SpringLiquibase;
import liquibase.integration.spring.SpringResourceAccessor;

public class ProgrammableLiquibase extends SpringLiquibase {

	private final DatabaseChangeLog databaseChangeLog;

	public ProgrammableLiquibase(DatabaseChangeLog databaseChangeLog) {
		this.databaseChangeLog = databaseChangeLog;
	}

	@Override
	public void afterPropertiesSet() {
		// Do nothing
	}

	// Our upgrades
	public void doUpgrades() throws Exception {
		Connection c = null;
		Liquibase liquibase = null;
		try {
			c = getDataSource().getConnection();
			liquibase = createLiquibase(c);
			performUpdate(liquibase);
		} finally {
			if (liquibase != null) {
				liquibase.close();
			}
		}
	}

	@Override
	protected Liquibase createLiquibase(Connection c) throws LiquibaseException {
		SpringResourceAccessor resourceAccessor = createResourceOpener();

		return new Liquibase(databaseChangeLog, resourceAccessor, createDatabase(c, resourceAccessor));
	}
}