Update snapshot and/or references of policy/pap to latest snapshots
[policy/pap.git] / main / src / main / java / org / onap / policy / pap / main / startstop / PapCommandLineArguments.java
index fd728d2..afc8fbc 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
- *  Modifications Copyright (C) 2019 AT&T Intellectual Property.
+ *  Copyright (C) 2019-2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 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;
+public class PapCommandLineArguments extends CommandLineArgumentsHandler {
 
-    private final Options options;
-    private String configurationFilePath = null;
-    private String propertyFilePath = null;
+    protected static final String GROUP_FILE_OPTION = "g";
+    protected static final String GROUP_FILE_LONG_OPTION = "groups-file";
+    public static final String GROUP_FILE_ARG_NAME = "GROUP_FILE";
+
+    protected static final String DEFAULT_GROUP_RESOURCE = "PapDb.json";
 
     /**
      * 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")
-                .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
+        super(Main.class.getName(), MessageConstants.POLICY_PAP, customOptionG());
+    }
+
+    private static Option customOptionG() {
+        return Option.builder(GROUP_FILE_OPTION).longOpt(GROUP_FILE_LONG_OPTION)
+                       .desc("the full path to the groups file to use, "
+                                     + "the groups file contains the group configuration added to the DB")
+                       .hasArg().argName(GROUP_FILE_ARG_NAME).required(false).type(String.class).build();
+    }
+
+    protected String getPdpGroupsConfiguration() {
+        return this.getCommandLine()
+                       .getOptionValue(GROUP_FILE_OPTION, DEFAULT_GROUP_RESOURCE);
+    }
+
+    @Override
+    public void validate() throws CommandLineException {
+        super.validate();
+        String groupConfig = getPdpGroupsConfiguration();
+        if (!groupConfig.equals(DEFAULT_GROUP_RESOURCE)) {
+            validateReadableFile(MessageConstants.POLICY_PAP, groupConfig);
+        }
     }
 
     /**
@@ -96,203 +74,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);
-        validateReadableFile("policy pap properties", propertyFilePath);
-    }
-
-    /**
-     * 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");
-        }
-    }
 }