package uk.co.optimisticpanda.dropwizard;
import static com.dbdeploy.database.DelimiterType.normal;
import static com.dbdeploy.database.LineEnding.platform;
import static com.google.common.base.Charsets.UTF_8;
import static com.google.common.base.Enums.getIfPresent;
import static com.google.common.base.Optional.fromNullable;
import java.io.File;
import java.nio.charset.Charset;
import com.dbdeploy.database.DelimiterType;
import com.dbdeploy.database.LineEnding;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
public class DbDeployProperties {
private String changelogTableName;
private String dbms;
private String delimiter;
private String delimiterType;
private String encoding;
private Long lastChangeToApply;
private String lineEnding;
private String scriptLocation;
private String outputFile;
private String templatesLocation;
private String undoOutputFile;
public String getChangelogTableName() {
return fromNullable(changelogTableName).or("changelog");
}
public String getDbms() {
return fromNullable(dbms).orNull();
}
public String getDelimiter() {
return fromNullable(delimiter).or(";");
}
public DelimiterType getDelimiterType() {
return getOptional(DelimiterType.class, delimiterType).or(normal);
}
public Charset getEncoding() {
return Charset.forName(fromNullable(encoding).or(UTF_8.name()));
}
public Long getLastChangeToApply() {
return fromNullable(lastChangeToApply).or(Long.MAX_VALUE);
}
public LineEnding getLineEnding() {
return getOptional(LineEnding.class, lineEnding).or(platform);
}
public String getScriptLocation() {
return fromNullable(scriptLocation).orNull();
}
public File getOutputFile() {
return outputFile == null ? null : new File(outputFile);
}
public String getTemplatesLocation() {
return fromNullable(templatesLocation).or("/");
}
public File getUndoOutputFile() {
return undoOutputFile == null ? null : new File(undoOutputFile);
}
private <D extends Enum<D>> Optional<D> getOptional(Class<D> clazz, String value){
return value == null ? Optional.<D>absent() : getIfPresent(clazz, value);
}
@VisibleForTesting
void setChangelogTableName(String changelogTableName) {
this.changelogTableName = changelogTableName;
}
@VisibleForTesting
void setDbms(String dbms) {
this.dbms = dbms;
}
@VisibleForTesting
void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
@VisibleForTesting
void setDelimiterType(String delimiterType) {
this.delimiterType = delimiterType;
}
@VisibleForTesting
void setEncoding(String encoding) {
this.encoding = encoding;
}
@VisibleForTesting
void setLastChangeToApply(Long lastChangeToApply) {
this.lastChangeToApply = lastChangeToApply;
}
@VisibleForTesting
void setLineEnding(String lineEnding) {
this.lineEnding = lineEnding;
}
@VisibleForTesting
void setScriptLocation(String scriptLocation) {
this.scriptLocation = scriptLocation;
}
@VisibleForTesting
void setOutputFile(String outputFile) {
this.outputFile = outputFile;
}
@VisibleForTesting
void setTemplateLocation(String templateLocation) {
this.templatesLocation = templateLocation;
}
@VisibleForTesting
void setUndoOutputFile(String undoOutputFile) {
this.undoOutputFile = undoOutputFile;
}
}