2019-10-03 12:22:44 +02:00
|
|
|
package eu.dnetlib.dhp.application;
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
2019-12-11 15:43:24 +01:00
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
2019-10-10 11:33:51 +02:00
|
|
|
import java.io.Serializable;
|
2019-12-11 15:43:24 +01:00
|
|
|
import java.io.StringWriter;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.zip.GZIPInputStream;
|
|
|
|
import java.util.zip.GZIPOutputStream;
|
2020-04-18 12:42:58 +02:00
|
|
|
import org.apache.commons.cli.*;
|
|
|
|
import org.apache.commons.codec.binary.Base64;
|
|
|
|
import org.apache.commons.io.IOUtils;
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2019-10-10 11:33:51 +02:00
|
|
|
public class ArgumentApplicationParser implements Serializable {
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
private final Options options = new Options();
|
|
|
|
private final Map<String, String> objectMap = new HashMap<>();
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
private final List<String> compressedValues = new ArrayList<>();
|
2019-12-11 15:43:24 +01:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public ArgumentApplicationParser(final String json_configuration) throws Exception {
|
|
|
|
final ObjectMapper mapper = new ObjectMapper();
|
|
|
|
final OptionsParameter[] configuration =
|
|
|
|
mapper.readValue(json_configuration, OptionsParameter[].class);
|
|
|
|
createOptionMap(configuration);
|
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public ArgumentApplicationParser(final OptionsParameter[] configuration) {
|
|
|
|
createOptionMap(configuration);
|
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
private void createOptionMap(final OptionsParameter[] configuration) {
|
2019-10-29 18:10:20 +01:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
Arrays.stream(configuration)
|
|
|
|
.map(
|
|
|
|
conf -> {
|
|
|
|
final Option o = new Option(conf.getParamName(), true, conf.getParamDescription());
|
|
|
|
o.setLongOpt(conf.getParamLongName());
|
|
|
|
o.setRequired(conf.isParamRequired());
|
|
|
|
if (conf.isCompressed()) {
|
|
|
|
compressedValues.add(conf.getParamLongName());
|
|
|
|
}
|
|
|
|
return o;
|
|
|
|
})
|
|
|
|
.forEach(options::addOption);
|
2020-04-18 12:42:58 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
// HelpFormatter formatter = new HelpFormatter();
|
|
|
|
// formatter.printHelp("myapp", null, options, null, true);
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public static String decompressValue(final String abstractCompressed) {
|
|
|
|
try {
|
|
|
|
byte[] byteArray = Base64.decodeBase64(abstractCompressed.getBytes());
|
|
|
|
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteArray));
|
|
|
|
final StringWriter stringWriter = new StringWriter();
|
|
|
|
IOUtils.copy(gis, stringWriter);
|
|
|
|
return stringWriter.toString();
|
|
|
|
} catch (Throwable e) {
|
|
|
|
System.out.println("Wrong value to decompress:" + abstractCompressed);
|
|
|
|
throw new RuntimeException(e);
|
2019-12-11 15:43:24 +01:00
|
|
|
}
|
2020-04-29 13:20:57 +02:00
|
|
|
}
|
2019-12-11 15:43:24 +01:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public static String compressArgument(final String value) throws Exception {
|
|
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
GZIPOutputStream gzip = new GZIPOutputStream(out);
|
|
|
|
gzip.write(value.getBytes());
|
|
|
|
gzip.close();
|
|
|
|
return java.util.Base64.getEncoder().encodeToString(out.toByteArray());
|
|
|
|
}
|
2019-12-11 15:43:24 +01:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public void parseArgument(final String[] args) throws Exception {
|
|
|
|
CommandLineParser parser = new BasicParser();
|
|
|
|
CommandLine cmd = parser.parse(options, args);
|
|
|
|
Arrays.stream(cmd.getOptions())
|
|
|
|
.forEach(
|
|
|
|
it ->
|
|
|
|
objectMap.put(
|
|
|
|
it.getLongOpt(),
|
|
|
|
compressedValues.contains(it.getLongOpt())
|
|
|
|
? decompressValue(it.getValue())
|
|
|
|
: it.getValue()));
|
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public String get(final String key) {
|
|
|
|
return objectMap.get(key);
|
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
|
2020-04-29 13:20:57 +02:00
|
|
|
public Map<String, String> getObjectMap() {
|
|
|
|
return objectMap;
|
|
|
|
}
|
2019-10-03 12:22:44 +02:00
|
|
|
}
|