package org.icij.task.transformers; import java.util.function.Function; import org.icij.task.Option; import org.icij.task.Options; public class CommonsTransformer implements Function<Options<String>, org.apache.commons.cli.Options> { @Override public org.apache.commons.cli.Options apply(final Options<String> options) { final org.apache.commons.cli.Options commonsOptions = new org.apache.commons.cli.Options(); for (Option<String> option : options) { String code = option.code() == null ? null : option.code().toString(); // The DefaultParser in commons-cli clones option objects before updating the value. // Work around this by overriding the clone method. org.apache.commons.cli.Option commonsOption = new org.apache.commons.cli.Option(code, option.name(), true, option.description()) { private static final long serialVersionUID = 7104410298761951462L; @Override public org.apache.commons.cli.Option clone() { return this; } }; commonsOption.setArgName(option.parameter()); commonsOption.setOptionalArg(true); option.update(commonsOption::getValuesList); commonsOptions.addOption(commonsOption); } return commonsOptions; } }