DELL
2024-02-21 4982b9614516dde101c3e44c60a612b3bfd8d6fe
iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/internal/cli/CliParser.java
@@ -1,136 +1,136 @@
package org.openmuc.openiec61850.internal.cli;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class CliParser {
    private final String name;
    private final String description;
    private String selectedGroup = "";
    private static final String HELP = "--help";
    private static class ParameterGroup {
        private final String name;
        private final List<CliParameter> parameters;
        public ParameterGroup(String name, List<CliParameter> parameters) {
            this.name = name;
            this.parameters = parameters;
        }
    }
    private final List<ParameterGroup> commandLineParameterGroups = new ArrayList<>();
    public CliParser(String name, String description) {
        this.name = name;
        this.description = description;
    }
    public void addParameterGroup(String groupName, List<CliParameter> parameters) {
        commandLineParameterGroups.add(new ParameterGroup(groupName.toLowerCase(), parameters));
    }
    public void addParameters(List<CliParameter> parameters) {
        commandLineParameterGroups.clear();
        commandLineParameterGroups.add(new ParameterGroup("", parameters));
    }
    public String getSelectedGroup() {
        return selectedGroup;
    }
    public void parseArguments(String[] args) throws CliParseException {
        if (args.length > 0 && HELP.equals(args[0])) {
            System.out.println(getUsageString());
            System.exit(0);
        }
        List<CliParameter> parameters = null;
        int i = 0;
        if (commandLineParameterGroups.get(0).name.isEmpty()) {
            parameters = commandLineParameterGroups.get(0).parameters;
        }
        else {
            if (args.length == 0) {
                throw new CliParseException("No parameters found.");
            }
            for (ParameterGroup parameterGroup : commandLineParameterGroups) {
                if (parameterGroup.name.equals(args[0].toLowerCase())) {
                    selectedGroup = parameterGroup.name;
                    parameters = parameterGroup.parameters;
                }
            }
            if (parameters == null) {
                throw new CliParseException("Group name " + args[0] + " is undefined.");
            }
            i++;
        }
        while (i < args.length) {
            boolean found = false;
            for (CliParameter option : parameters) {
                if (args[i].equals(option.getName())) {
                    i += option.parse(args, i);
                    found = true;
                    break;
                }
            }
            if (!found) {
                throw new CliParseException("Unknown parameter found: " + args[i]);
            }
        }
        for (CliParameter option : parameters) {
            if (!option.isOptional() && !option.isSelected()) {
                throw new CliParseException("Parameter " + option.getName() + " is mandatory but was not selected.");
            }
        }
    }
    public String getUsageString() {
        StringBuilder sb = new StringBuilder();
        sb.append("NAME\n\t").append(name).append(" - ").append(description).append("\n\nSYNOPSIS\n");
        for (ParameterGroup parameterGroup : commandLineParameterGroups) {
            sb.append("\t").append(name).append(" ").append(parameterGroup.name);
            int characterColumn = name.length() + parameterGroup.name.length() + 1;
            for (CliParameter parameter : parameterGroup.parameters) {
                if ((characterColumn + parameter.appendSynopsis(new StringBuilder())) > 90) {
                    characterColumn = 0;
                    sb.append("\n\t    ");
                }
                sb.append(' ');
                characterColumn += parameter.appendSynopsis(sb) + 1;
            }
            sb.append("\n");
        }
        sb.append("\nOPTIONS\n");
        Set<CliParameter> parameters = new LinkedHashSet<>();
        for (ParameterGroup parameterGroup : commandLineParameterGroups) {
            parameters.addAll(parameterGroup.parameters);
        }
        for (CliParameter parameter : parameters) {
            sb.append(' ');
            parameter.appendDescription(sb);
            sb.append("\n\n");
        }
        sb.append("\t--help display this help and exit");
        return sb.toString();
    }
}
package org.openmuc.openiec61850.internal.cli;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class CliParser {
    private final String name;
    private final String description;
    private String selectedGroup = "";
    private static final String HELP = "--help";
    private static class ParameterGroup {
        private final String name;
        private final List<CliParameter> parameters;
        public ParameterGroup(String name, List<CliParameter> parameters) {
            this.name = name;
            this.parameters = parameters;
        }
    }
    private final List<ParameterGroup> commandLineParameterGroups = new ArrayList<>();
    public CliParser(String name, String description) {
        this.name = name;
        this.description = description;
    }
    public void addParameterGroup(String groupName, List<CliParameter> parameters) {
        commandLineParameterGroups.add(new ParameterGroup(groupName.toLowerCase(), parameters));
    }
    public void addParameters(List<CliParameter> parameters) {
        commandLineParameterGroups.clear();
        commandLineParameterGroups.add(new ParameterGroup("", parameters));
    }
    public String getSelectedGroup() {
        return selectedGroup;
    }
    public void parseArguments(String[] args) throws CliParseException {
        if (args.length > 0 && HELP.equals(args[0])) {
            System.out.println(getUsageString());
            System.exit(0);
        }
        List<CliParameter> parameters = null;
        int i = 0;
        if (commandLineParameterGroups.get(0).name.isEmpty()) {
            parameters = commandLineParameterGroups.get(0).parameters;
        }
        else {
            if (args.length == 0) {
                throw new CliParseException("No parameters found.");
            }
            for (ParameterGroup parameterGroup : commandLineParameterGroups) {
                if (parameterGroup.name.equals(args[0].toLowerCase())) {
                    selectedGroup = parameterGroup.name;
                    parameters = parameterGroup.parameters;
                }
            }
            if (parameters == null) {
                throw new CliParseException("Group name " + args[0] + " is undefined.");
            }
            i++;
        }
        while (i < args.length) {
            boolean found = false;
            for (CliParameter option : parameters) {
                if (args[i].equals(option.getName())) {
                    i += option.parse(args, i);
                    found = true;
                    break;
                }
            }
            if (!found) {
                throw new CliParseException("Unknown parameter found: " + args[i]);
            }
        }
        for (CliParameter option : parameters) {
            if (!option.isOptional() && !option.isSelected()) {
                throw new CliParseException("Parameter " + option.getName() + " is mandatory but was not selected.");
            }
        }
    }
    public String getUsageString() {
        StringBuilder sb = new StringBuilder();
        sb.append("NAME\n\t").append(name).append(" - ").append(description).append("\n\nSYNOPSIS\n");
        for (ParameterGroup parameterGroup : commandLineParameterGroups) {
            sb.append("\t").append(name).append(" ").append(parameterGroup.name);
            int characterColumn = name.length() + parameterGroup.name.length() + 1;
            for (CliParameter parameter : parameterGroup.parameters) {
                if ((characterColumn + parameter.appendSynopsis(new StringBuilder())) > 90) {
                    characterColumn = 0;
                    sb.append("\n\t    ");
                }
                sb.append(' ');
                characterColumn += parameter.appendSynopsis(sb) + 1;
            }
            sb.append("\n");
        }
        sb.append("\nOPTIONS\n");
        Set<CliParameter> parameters = new LinkedHashSet<>();
        for (ParameterGroup parameterGroup : commandLineParameterGroups) {
            parameters.addAll(parameterGroup.parameters);
        }
        for (CliParameter parameter : parameters) {
            sb.append(' ');
            parameter.appendDescription(sb);
            sb.append("\n\n");
        }
        sb.append("\t--help display this help and exit");
        return sb.toString();
    }
}