From: adheli.tavares Date: Thu, 15 Apr 2021 09:03:11 +0000 (+0100) Subject: Refactor PapCommandLineArguments class X-Git-Tag: 2.5.0~54 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=fa4fac726d6c843e038bbeefbccdc0f151a1a9e2;p=policy%2Fpap.git Refactor PapCommandLineArguments class CMD Args class to extend functionality from Common CMD class. Issue-ID: POLICY-3129 Change-Id: Ia00cf7b0277e779811eaac556eebe11da95ed380 Signed-off-by: adheli.tavares --- diff --git a/main/src/main/java/org/onap/policy/pap/main/startstop/PapCommandLineArguments.java b/main/src/main/java/org/onap/policy/pap/main/startstop/PapCommandLineArguments.java index 78c2cc70..6020c847 100644 --- a/main/src/main/java/org/onap/policy/pap/main/startstop/PapCommandLineArguments.java +++ b/main/src/main/java/org/onap/policy/pap/main/startstop/PapCommandLineArguments.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,72 +21,36 @@ package org.onap.policy.pap.main.startstop; -import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; -import java.util.Arrays; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.pap.main.PolicyPapException; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; +import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.pap.main.PolicyPapRuntimeException; - /** * This class reads and handles command line parameters for the policy pap service. * * @author Ram Krishna Verma (ram.krishna.verma@est.tech) */ -public class PapCommandLineArguments { - private static final String FILE_MESSAGE_PREAMBLE = " file \""; - private static final int HELP_LINE_LENGTH = 120; - - private final Options options; - private String configurationFilePath = null; - private String propertyFilePath = null; +public class PapCommandLineArguments extends CommandLineArgumentsHandler { /** * Construct the options for the CLI editor. */ public PapCommandLineArguments() { - //@formatter:off - options = new Options(); - options.addOption(Option.builder("h") - .longOpt("help") - .desc("outputs the usage of this command") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of policy pap") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("c") - .longOpt("config-file") - .desc("the full path to the configuration file to use, " - + "the configuration file must be a Json file containing the policy pap parameters") - .hasArg() - .argName("CONFIG_FILE") - .required(false) - .type(String.class) - .build()); - options.addOption(Option.builder("p") - .longOpt("property-file") + super(Main.class.getName(), MessageConstants.POLICY_PAP, customOption()); + } + + /** + * Builds the extra property-file option to be declared on constructor. + * + * @return property-file option + */ + private static Option customOption() { + return Option.builder("p").longOpt("property-file") .desc("the full path to the topic property file to use, " + "the property file contains the policy pap topic properties") - .hasArg() - .argName("PROP_FILE") - .required(false) - .type(String.class) - .build()); - //@formatter:on + .hasArg().argName("PROP_FILE").required(false).type(String.class).build(); } /** @@ -95,202 +59,12 @@ public class PapCommandLineArguments { * @param args The command line arguments */ public PapCommandLineArguments(final String[] args) { - // Set up the options with the default constructor this(); - // Parse the arguments try { parse(args); - } catch (final PolicyPapException e) { + } catch (final CommandLineException e) { throw new PolicyPapRuntimeException("parse error on policy pap parameters", e); } } - - /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no message - * @throws PolicyPapException on command argument errors - */ - public String parse(final String[] args) throws PolicyPapException { - // Clear all our arguments - setConfigurationFilePath(null); - setPropertyFilePath(null); - - CommandLine commandLine = null; - try { - commandLine = new DefaultParser().parse(options, args); - } catch (final ParseException e) { - throw new PolicyPapException("invalid command line arguments specified : " + e.getMessage()); - } - - // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); - - if (remainingArgs.length > 0 && commandLine.hasOption('c') || remainingArgs.length > 0) { - throw new PolicyPapException("too many command line arguments specified : " + Arrays.toString(args)); - } - - if (remainingArgs.length == 1) { - configurationFilePath = remainingArgs[0]; - } - - if (commandLine.hasOption('h')) { - return help(Main.class.getName()); - } - - if (commandLine.hasOption('v')) { - return version(); - } - - if (commandLine.hasOption('c')) { - setConfigurationFilePath(commandLine.getOptionValue('c')); - } - - if (commandLine.hasOption('p')) { - setPropertyFilePath(commandLine.getOptionValue('p')); - } - - return null; - } - - /** - * Validate the command line options. - * - * @throws PolicyPapException on command argument validation errors - */ - public void validate() throws PolicyPapException { - validateReadableFile("policy pap configuration", configurationFilePath); - } - - /** - * Print version information for policy pap. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("version.txt"); - } - - /** - * Print help information for policy pap. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final HelpFormatter helpFormatter = new HelpFormatter(); - final StringWriter stringWriter = new StringWriter(); - final PrintWriter printWriter = new PrintWriter(stringWriter); - - helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0, - 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the configuration file path. - * - * @return the configuration file path - */ - public String getConfigurationFilePath() { - return configurationFilePath; - } - - /** - * Gets the full expanded configuration file path. - * - * @return the configuration file path - */ - public String getFullConfigurationFilePath() { - return ResourceUtils.getFilePath4Resource(getConfigurationFilePath()); - } - - /** - * Sets the configuration file path. - * - * @param configurationFilePath the configuration file path - */ - public void setConfigurationFilePath(final String configurationFilePath) { - this.configurationFilePath = configurationFilePath; - - } - - /** - * Check set configuration file path. - * - * @return true, if check set configuration file path - */ - public boolean checkSetConfigurationFilePath() { - return configurationFilePath != null && configurationFilePath.length() > 0; - } - - /** - * Gets the property file path. - * - * @return the property file path - */ - public String getPropertyFilePath() { - return propertyFilePath; - } - - /** - * Gets the full expanded property file path. - * - * @return the property file path - */ - public String getFullPropertyFilePath() { - return ResourceUtils.getFilePath4Resource(getPropertyFilePath()); - } - - /** - * Sets the property file path. - * - * @param propertyFilePath the property file path - */ - public void setPropertyFilePath(final String propertyFilePath) { - this.propertyFilePath = propertyFilePath; - - } - - /** - * Check set property file path. - * - * @return true, if check set property file path - */ - public boolean checkSetPropertyFilePath() { - return propertyFilePath != null && propertyFilePath.length() > 0; - } - - /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws PolicyPapException on the file name passed as a parameter - */ - private void validateReadableFile(final String fileTag, final String fileName) throws PolicyPapException { - if (fileName == null || fileName.length() == 0) { - throw new PolicyPapException(fileTag + " file was not specified as an argument"); - } - - // The file name refers to a resource on the local file system - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new PolicyPapException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new PolicyPapException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new PolicyPapException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new PolicyPapException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is ureadable"); - } - } } diff --git a/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java b/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java index d2dc1955..4a386c9c 100644 --- a/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java +++ b/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java @@ -26,11 +26,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.List; import java.util.stream.Collectors; import org.junit.Test; diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPapParameterHandler.java b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPapParameterHandler.java index b817677b..1761a7d1 100644 --- a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPapParameterHandler.java +++ b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPapParameterHandler.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. - * Modifications Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import static org.junit.Assert.assertTrue; import java.io.FileNotFoundException; import org.junit.Test; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.pap.main.PolicyPapException; import org.onap.policy.pap.main.startstop.PapCommandLineArguments; @@ -40,7 +41,7 @@ import org.onap.policy.pap.main.startstop.PapCommandLineArguments; public class TestPapParameterHandler { @Test - public void testParameterHandlerNoParameterFile() throws PolicyPapException { + public void testParameterHandlerNoParameterFile() throws PolicyPapException, CommandLineException { final String[] noArgumentString = { "-c", "parameters/NoParameterFile.json" }; final PapCommandLineArguments noArguments = new PapCommandLineArguments(); @@ -52,7 +53,7 @@ public class TestPapParameterHandler { } @Test - public void testParameterHandlerEmptyParameters() throws PolicyPapException { + public void testParameterHandlerEmptyParameters() throws PolicyPapException, CommandLineException { final String[] emptyArgumentString = { "-c", "parameters/EmptyParameters.json" }; final PapCommandLineArguments emptyArguments = new PapCommandLineArguments(); @@ -63,7 +64,7 @@ public class TestPapParameterHandler { } @Test - public void testParameterHandlerInvalidParameters() throws PolicyPapException { + public void testParameterHandlerInvalidParameters() throws PolicyPapException, CommandLineException { final String[] invalidArgumentString = { "-c", "parameters/InvalidParameters.json" }; final PapCommandLineArguments invalidArguments = new PapCommandLineArguments(); @@ -75,7 +76,7 @@ public class TestPapParameterHandler { } @Test - public void testParameterHandlerNoParameters() throws PolicyPapException { + public void testParameterHandlerNoParameters() throws PolicyPapException, CommandLineException { final String[] noArgumentString = { "-c", "parameters/NoParameters.json" }; final PapCommandLineArguments noArguments = new PapCommandLineArguments(); @@ -85,7 +86,7 @@ public class TestPapParameterHandler { } @Test - public void testParameterHandlerMinumumParameters() throws PolicyPapException { + public void testParameterHandlerMinumumParameters() throws PolicyPapException, CommandLineException { final String[] minArgumentString = { "-c", "parameters/MinimumParameters.json" }; final PapCommandLineArguments minArguments = new PapCommandLineArguments(); @@ -96,7 +97,7 @@ public class TestPapParameterHandler { } @Test - public void testPapParameterGroup() throws PolicyPapException { + public void testPapParameterGroup() throws PolicyPapException, CommandLineException { final String[] papConfigParameters = { "-c", "parameters/PapConfigParameters.json" }; final PapCommandLineArguments arguments = new PapCommandLineArguments(); @@ -108,7 +109,7 @@ public class TestPapParameterHandler { } @Test - public void testPapParameterGroup_InvalidName() throws PolicyPapException { + public void testPapParameterGroup_InvalidName() throws PolicyPapException, CommandLineException { final String[] papConfigParameters = { "-c", "parameters/PapConfigParameters_InvalidName.json" }; final PapCommandLineArguments arguments = new PapCommandLineArguments(); @@ -120,7 +121,7 @@ public class TestPapParameterHandler { } @Test - public void testPapVersion() throws PolicyPapException { + public void testPapVersion() throws PolicyPapException, CommandLineException { final String[] papConfigParameters = { "-v" }; final PapCommandLineArguments arguments = new PapCommandLineArguments(); final String version = arguments.parse(papConfigParameters); @@ -128,7 +129,7 @@ public class TestPapParameterHandler { } @Test - public void testPapHelp() throws PolicyPapException { + public void testPapHelp() throws PolicyPapException, CommandLineException { final String[] papConfigParameters = { "-h" }; final PapCommandLineArguments arguments = new PapCommandLineArguments(); final String help = arguments.parse(papConfigParameters); @@ -136,7 +137,7 @@ public class TestPapParameterHandler { } @Test - public void testPapInvalidOption() throws PolicyPapException { + public void testPapInvalidOption() throws PolicyPapException, CommandLineException { final String[] papConfigParameters = { "-d" }; final PapCommandLineArguments arguments = new PapCommandLineArguments(); assertThatThrownBy(() -> arguments.parse(papConfigParameters))