Skip to content

Commit

Permalink
refactor defaults file error handling to use factory pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
StevenMassaro committed Apr 15, 2024
1 parent 3ee3ddc commit df092f3
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,12 @@
import java.security.PrivilegedAction;
import java.time.Duration;
import java.util.*;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.logging.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;

import static java.util.ResourceBundle.getBundle;
import static liquibase.configuration.LiquibaseConfiguration.REGISTERED_VALUE_PROVIDERS_KEY;
import static liquibase.integration.commandline.LiquibaseLauncherSettings.LiquibaseLauncherSetting.LIQUIBASE_HOME;
import static liquibase.integration.commandline.LiquibaseLauncherSettings.getSetting;
import static liquibase.integration.commandline.VersionUtils.*;
import static liquibase.util.SystemUtil.isWindows;

Expand Down Expand Up @@ -626,31 +621,33 @@ private List<ConfigurationValueProvider> registerValueProviders(String[] args) t
}

final PathHandlerFactory pathHandlerFactory = Scope.getCurrentScope().getSingleton(PathHandlerFactory.class);
Resource resource = pathHandlerFactory.getResource(defaultsFileConfig.getValue());
String defaultsFileConfigValue = defaultsFileConfig.getValue();
Resource resource = pathHandlerFactory.getResource(defaultsFileConfigValue);
if (resource.exists()) {
try (InputStream defaultsStream = resource.openInputStream()) {
if (defaultsStream != null) {
final DefaultsFileValueProvider fileProvider = new DefaultsFileValueProvider(defaultsStream, "File exists at path " + defaultsFileConfig.getValue());
final DefaultsFileValueProvider fileProvider = new DefaultsFileValueProvider(defaultsStream, "File exists at path " + defaultsFileConfigValue);
liquibaseConfiguration.registerProvider(fileProvider);
returnList.add(fileProvider);
}
}
} else {
InputStream inputStreamOnClasspath = Thread.currentThread().getContextClassLoader().getResourceAsStream(defaultsFileConfig.getValue());
InputStream inputStreamOnClasspath = Thread.currentThread().getContextClassLoader().getResourceAsStream(defaultsFileConfigValue);
if (inputStreamOnClasspath == null) {
Scope.getCurrentScope().getLog(getClass()).fine("Cannot find defaultsFile " + defaultsFileConfig.getValue());
Scope.getCurrentScope().getLog(getClass()).fine("Cannot find defaultsFile " + defaultsFileConfigValue);
if (!defaultsFileConfig.wasDefaultValueUsed()) {
//can't use UI since it's not configured correctly yet
System.err.println("Could not find defaults file " + defaultsFileConfig.getValue());
DefaultsFileErrorHandlerFactory defaultsFileErrorHandlerFactory = Scope.getCurrentScope().getSingleton(DefaultsFileErrorHandlerFactory.class);
DefaultsFileErrorHandler defaultsFileErrorHandler = defaultsFileErrorHandlerFactory.getDefaultsFileErrorHandler();
defaultsFileErrorHandler.fileNotFound(defaultsFileConfigValue);
}
} else {
final DefaultsFileValueProvider fileProvider = new DefaultsFileValueProvider(inputStreamOnClasspath, "File in classpath " + defaultsFileConfig.getValue());
final DefaultsFileValueProvider fileProvider = new DefaultsFileValueProvider(inputStreamOnClasspath, "File in classpath " + defaultsFileConfigValue);
liquibaseConfiguration.registerProvider(fileProvider);
returnList.add(fileProvider);
}
}

final File defaultsFile = new File(defaultsFileConfig.getValue());
final File defaultsFile = new File(defaultsFileConfigValue);
File localDefaultsFile = new File(defaultsFile.getAbsolutePath().replaceFirst(".properties$", ".local.properties"));
if (localDefaultsFile.exists()) {
final DefaultsFileValueProvider fileProvider = new DefaultsFileValueProvider(localDefaultsFile) {
Expand Down
1 change: 1 addition & 0 deletions liquibase-standard/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@
<param>liquibase.parser.LiquibaseSqlParser</param>
<param>liquibase.database.LiquibaseTableNames</param>
<param>liquibase.changelog.visitor.ValidatingVisitor</param>
<param>liquibase.integration.commandline.DefaultsFileErrorHandler</param>
</services>
</configuration>
<executions>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package liquibase.integration.commandline;

import liquibase.plugin.Plugin;

public interface DefaultsFileErrorHandler extends Plugin {
void fileNotFound(String defaultsFileConfigValue);

int getPriority();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package liquibase.integration.commandline;

import liquibase.plugin.AbstractPluginFactory;

public class DefaultsFileErrorHandlerFactory extends AbstractPluginFactory<DefaultsFileErrorHandler> {
@Override
protected Class<DefaultsFileErrorHandler> getPluginClass() {
return DefaultsFileErrorHandler.class;
}

@Override
protected int getPriority(DefaultsFileErrorHandler obj, Object... args) {
return obj.getPriority();
}

public DefaultsFileErrorHandler getDefaultsFileErrorHandler() {
return getPlugin();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package liquibase.integration.commandline;

public class StandardDefaultsFileErrorHandler implements DefaultsFileErrorHandler{


@Override
public void fileNotFound(String defaultsFileConfigValue) {
//can't use UI since it's not configured correctly yet
System.err.println("Could not find defaults file " + defaultsFileConfigValue);
}

@Override
public int getPriority() {
return PRIORITY_DEFAULT;
}
}

0 comments on commit df092f3

Please sign in to comment.