--- a/src/main/java/de/unixwork/uwproj/Option.java Wed Sep 06 22:55:42 2023 +0200 +++ b/src/main/java/de/unixwork/uwproj/Option.java Sun Sep 10 12:52:10 2023 +0200 @@ -6,45 +6,47 @@ import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; + +import static de.unixwork.uwproj.Util.shId; public class Option { private String arg; - - LinkedList<OptionValue> values = new LinkedList<>(); - LinkedList<OptionDefault> defaults = new LinkedList<>(); - - public static Option parse(Project project, Element element) throws Exception { - Option opt = new Option(); + + private final LinkedList<OptionValue> values = new LinkedList<>(); + private final LinkedList<OptionDefault> defaults = new LinkedList<>(); + + public static Option parse(Element element) throws Exception { + var opt = new Option(); String arg = element.getAttribute("arg"); - if(arg.isEmpty()) { + if (arg.isBlank()) { throw new Exception("Option has no argument string"); } opt.setArgument(arg); - + NodeList nodes = element.getChildNodes(); - for(int i=0;i<nodes.getLength();i++) { + for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { - Element elm = (Element)node; + Element elm = (Element) node; String n = elm.getNodeName(); - if(n.equals("value")) { - OptionValue value = new OptionValue(opt); - value.setValue(elm.getAttribute("str")); - value.setTargetData(TargetData.parse(elm)); - opt.values.add(value); - } else if(n.equals("default")) { - String defValue = elm.getAttribute("value"); + if (n.equals("value")) { + opt.values.add(new OptionValue(opt, + elm.getAttribute("str"), + TargetData.parse(elm) + )); + } else if (n.equals("default")) { + var def = new OptionDefault(opt); + def.setValueName(elm.getAttribute("value")); String defPlatform = elm.getAttribute(("platform")); - OptionDefault def = new OptionDefault(opt); - def.setValueName(defValue); - if(!defPlatform.isEmpty()) { + if (!defPlatform.isBlank()) { def.setPlatform(defPlatform); } opt.defaults.add(def); } } } - + return opt; } @@ -55,45 +57,32 @@ public void setArgument(String arg) { this.arg = arg; } - + public String getVarName() { - return "OPT_" + arg.toUpperCase(); + return shId("OPT_" + arg.toUpperCase()); } - + public String getArgValue() { - return "${ARG:"+(3+arg.length())+"}"; + return "${ARG:" + (3 + arg.length()) + "}"; } - + public List<OptionValue> getValues() { return values; } - + public List<OptionDefault> getDefaults() { return defaults; } - + public String getValueFunc(String value) { - return "checkopt_"+arg+"_"+value; + return shId("checkopt_" + arg + "_" + value); } - + public String getValuesString() { - if(values.isEmpty()) { - return "()"; - } else if(values.size() == 1) { + if (values.size() == 1) { return values.get(0).getValue(); } else { - StringBuilder vs = new StringBuilder(); - vs.append('('); - for(int i=0;i<values.size();i++) { - if(i < values.size()-1) { - vs.append(values.get(i).getValue()); - vs.append('|'); - } else { - vs.append(values.get(i).getValue()); - } - } - vs.append(')'); - return vs.toString(); + return "(" + values.stream().map(OptionValue::getValue).collect(Collectors.joining("|")) + ")"; } } }