![JAR search and dependency download from the Maven repository](/logo.png)
com.dslplatform.compiler.client.parameters.PropertiesFile Maven / Gradle / Ivy
package com.dslplatform.compiler.client.parameters;
import com.dslplatform.compiler.client.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class PropertiesFile implements CompileParameter {
private final List parameters;
public PropertiesFile(List parameters) {
this.parameters = parameters;
}
@Override
public String getAlias() { return "properties"; }
@Override
public String getUsage() { return "file"; }
@Override
public boolean check(final Context context) {
if (context.contains(this)) {
final String properties = context.get(this);
if (properties == null || properties.length() == 0) {
context.error("Incorrectly defined .properties file");
return false;
}
final File file = new File(properties);
if (!file.exists()) {
context.error("Can't find specified properties file: " + file.getAbsolutePath());
return false;
}
final Either content = Utils.readFile(file);
if (!content.isSuccess()) {
context.error("Error reading specified properties file: " + file.getAbsolutePath());
return false;
}
final List customParsers = new ArrayList();
for (final CompileParameter cp : parameters) {
if (cp instanceof ParameterParser) {
customParsers.add((ParameterParser) cp);
}
}
final List errors = new ArrayList();
for (final String row : content.get().split("\n")) {
final String line = row.trim();
if (line.length() == 0 || line.startsWith("#") || line.startsWith("//")) {
continue;
}
final int eq = line.indexOf('=');
final String name = line.substring(0, eq != -1 ? eq : line.length());
final String value = eq == -1 ? null : line.substring(eq + 1);
final CompileParameter cp = from(name);
if (cp == null) {
boolean matched = false;
for (final ParameterParser parser : customParsers) {
final Either tryParse = parser.tryParse(name, value, context);
if (!tryParse.isSuccess()) {
errors.add(tryParse.explainError());
matched = true;
break;
} else if (tryParse.get()) {
matched = true;
break;
}
}
if (!matched) {
errors.add("Unknown parameter: " + name);
}
} else {
if (eq == -1 && cp.getUsage() != null) {
if (cp instanceof ParameterParser) {
Either tryParse = ((ParameterParser) cp).tryParse(name, null, context);
if (tryParse.isSuccess() && tryParse.get()) {
context.put(cp, null);
} else {
errors.add("Expecting " + cp.getUsage() + " after = for " + line);
}
} else {
errors.add("Expecting " + cp.getUsage() + " after = for " + line);
}
} else {
context.put(cp, value);
}
}
}
if (errors.size() > 0) {
context.error("Errors found in properties file: " + file.getAbsolutePath());
for (final String err : errors) {
context.error(err);
}
return false;
}
}
return true;
}
private CompileParameter from(final String value) {
for (final CompileParameter cp : parameters) {
if (cp.getAlias().equalsIgnoreCase(value)) {
return cp;
}
}
return null;
}
@Override
public void run(final Context context) {
}
@Override
public String getShortDescription() {
return "Use file with predefined arguments";
}
@Override
public String getDetailedDescription() {
return "Instead of passing arguments special file can be used instead.\n" +
"A simple properties file with the same exact names for properties.\n" +
"\n" +
"Example compile_java.properties:\n" +
"\ttarget=java_client\n" +
"\tpostgres=localhost/Database?user=user&password=password\n" +
"\tdownload\n" +
"\tmigration\n" +
"\tapply\n";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy