/*
* Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 3 of the GNU Lesser General Public License
*/
public class Parser {
- private final ArrayList<Parameter> parameters = new ArrayList<Parameter>();
-
- public <E extends Parameter> E add(final E parameter) {
- parameters.add(parameter);
- return parameter;
- }
-
- /**
- * Return parameter by given alias or <code>null</code> if no parameter
- * exists for given alias.
- */
- public Parameter findParameterByAlias(final String alias) {
-
- for (final Parameter parameter : parameters)
- if (parameter.matchesAlias(alias))
- return parameter;
-
- return null;
- }
-
- /**
- * @return <code>true</code> if no errors were found. <code>false</code>
- * otherwise.
- */
- public boolean parse(final String[] args) {
-
- Parameter currentParameter = null;
-
- for (final String argument : args) {
-
- final Parameter parameterForAlias = findParameterByAlias(argument);
- if (parameterForAlias == null) {
- if (currentParameter == null) {
- System.out.println("Unknown commandline parameter: "
- + argument);
- return false;
- }
-
- if (!currentParameter.addArgument(argument))
- return false;
-
- } else {
- if (currentParameter != null)
- if (!currentParameter.noMoreArguments())
- return false;
-
- parameterForAlias.setParameterSpecified(true);
- currentParameter = parameterForAlias;
- }
-
- }
-
- // check if any mandatory parameters are missing
-
- for (final Parameter parameter : parameters)
- if (parameter.isMandatory() && (!parameter.isParameterSpecified())) {
- System.out.println("Error! Mandatory parameter ("
- + parameter.getAliases() + ") is not specified.");
- return false;
- }
-
- return true;
- }
-
- public void showHelp() {
- for (final Parameter parameter : parameters)
- System.out.println(parameter.getHelp());
- }
+ private final ArrayList<Parameter<?, ? extends Parameter>> parameters = new ArrayList<>();
+
+ public <E extends Parameter> E add(final E parameter) {
+ parameters.add(parameter);
+ return parameter;
+ }
+
+ /**
+ * @return <code>true</code> if no errors were found. <code>false</code>
+ * otherwise.
+ */
+ private boolean checkMandatoryArgumentsPresent() {
+
+ for (final Parameter parameter : parameters)
+ if (parameter.isMandatory() && (!parameter.isSpecified())) {
+ System.out.println("Error! Mandatory parameter ("
+ + parameter.getAliases() + ") is not specified.");
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return parameter by given alias or <code>null</code> if no parameter
+ * exists for given alias.
+ *
+ * @param alias parameter alias
+ * @return found parameter or <code>null</code> if parameter was not found.
+ */
+ public Parameter findParameterByAlias(final String alias) {
+
+ for (final Parameter parameter : parameters)
+ if (parameter.matchesAlias(alias))
+ return parameter;
+
+ return null;
+ }
+
+ /**
+ * @param args commandline arguments
+ * @return <code>true</code> if no errors were found. <code>false</code>
+ * otherwise.
+ */
+ public boolean parse(final String[] args) {
+
+ Parameter currentParameter = null;
+
+ for (final String argument : args) {
+
+ final Parameter parameterForAlias = findParameterByAlias(argument);
+ if (parameterForAlias == null) {
+ if (currentParameter == null) {
+ System.out.println("Unknown commandline parameter: "
+ + argument);
+ return false;
+ }
+
+ if (!currentParameter.addArgument(argument))
+ return false;
+
+ } else {
+ if (currentParameter != null)
+ if (!currentParameter.noMoreArguments())
+ return false;
+
+ parameterForAlias.setSpecified(true);
+ currentParameter = parameterForAlias;
+ }
+
+ }
+
+ return checkMandatoryArgumentsPresent();
+ }
+
+ public void showHelp() {
+ for (final Parameter parameter : parameters)
+ System.out.println(parameter.getHelp());
+ }
}