| | |
| | | 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();
|
| | | }
|
| | |
|
| | | }
|