# ClientBuilderParameters.java

    /*
    ** Module   : ClientBuilderParameters.java
    ** Abstract : store the process parameters.
    **
    ** Copyright (c) 2013-2024, Golden Code Development Corporation.
    **
    ** -#- -I- --Date-- -------------------------------Description------------------------------------
    ** 001 MAG 20131119 First version.
    ** 002 MAG 20140206 Add referrer property.
    ** 003 CA  20140206 Refactored to make it unaware of the type of the P2J client being spawned.
    ** 004 MAG 20140224 Add support for outputToFile option.
    ** 005 GES 20150211 Removed application arguments support.
    ** 006 EVL 20200121 Adding directory based configurable debug level for spawner support.
    ** 007 SBI 20230307 Added updatePortForJavaDebuggerAgent and updatePortForJMXAgent.
    ** 008 GBB 20230512 Logging methods replaced by CentralLogger/ConversionStatus.
    ** 009 GBB 20230825 Adding new field ssoFwdUser.
    ** 010 GBB 20231113 Adding new field storageId.
    ** 011 EVL 20240118 Adding method to check if we need native logger for spawn.
    ** 012 GBB 20240709 Letting concrete implementations to provide ClientBuilderOptions and 'pass
    **                  authentication' flag. Making all fields immutable. Removing convenience methods
    **                  unwrapping options for clear identity.
    */
    /*
    ** This program is free software: you can redistribute it and/or modify
    ** it under the terms of the GNU Affero General Public License as
    ** published by the Free Software Foundation, either version 3 of the
    ** License, or (at your option) any later version.
    **
    ** This program is distributed in the hope that it will be useful,
    ** but WITHOUT ANY WARRANTY; without even the implied warranty of
    ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    ** GNU Affero General Public License for more details.
    **
    ** You may find a copy of the GNU Affero GPL version 3 at the following
    ** location: https://www.gnu.org/licenses/agpl-3.0.en.html
    **
    ** Additional terms under GNU Affero GPL version 3 section 7:
    **
    **   Under Section 7 of the GNU Affero GPL version 3, the following additional
    **   terms apply to the works covered under the License.  These additional terms
    **   are non-permissive additional terms allowed under Section 7 of the GNU
    **   Affero GPL version 3 and may not be removed by you.
    **
    **   0. Attribution Requirement.
    **
    **     You must preserve all legal notices or author attributions in the covered
    **     work or Appropriate Legal Notices displayed by works containing the covered
    **     work.  You may not remove from the covered work any author or developer
    **     credit already included within the covered work.
    **
    **   1. No License To Use Trademarks.
    **
    **     This license does not grant any license or rights to use the trademarks
    **     Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
    **     of Golden Code Development Corporation. You are not authorized to use the
    **     name Golden Code, FWD, or the names of any author or contributor, for
    **     publicity purposes without written authorization.
    **
    **   2. No Misrepresentation of Affiliation.
    **
    **     You may not represent yourself as Golden Code Development Corporation or FWD.
    **
    **     You may not represent yourself for publicity purposes as associated with
    **     Golden Code Development Corporation, FWD, or any author or contributor to
    **     the covered work, without written authorization.
    **
    **   3. No Misrepresentation of Source or Origin.
    **
    **     You may not represent the covered work as solely your work.  All modified
    **     versions of the covered work must be marked in a reasonable way to make it
    **     clear that the modified work is not originating from Golden Code Development
    **     Corporation or FWD.  All modified versions must contain the notices of
    **     attribution required in this license.
    */

    package com.goldencode.p2j.main;

    import java.util.*;

    /**
     * This structure holds default parameters as well specific parameters used to create and spawn a
     * P2J client process.
     */
    public abstract class ClientBuilderParameters
    {
       /** Client assigned uuid */
       private final String uuid;

       /** OS user name */
       private final String osUser;

       /** OS password */
       private final String osPass;

       /**
        * The server's secure port or -1 if this is a remote launch (the port will be dynamically filled in
        * later in that case).
        */
       private final int securePort;

       /**
        * The alias of the server certificate in the certificate key store which will be used to authenticate
        * that this server indeed is on the other side of the secure connection.
        */
       private final String serverAlias;

       /**
        * Public constructor. Assign a unique UUID to this process.
        *
        * @param    osUser
        *           The OS account username.
        * @param    osPass
        *           The OS account password.
        * @param    securePort
        *           The server's secure port or -1 if this is a remote launch.
        * @param    serverAlias
        *           The alias of the server certificate.
        */
       public ClientBuilderParameters(String osUser, String osPass, int securePort, String serverAlias)
       {
          this.osUser = osUser;
          this.osPass = osPass;
          this.securePort = securePort;
          this.serverAlias = serverAlias;
          this.uuid = UUID.randomUUID().toString();
       }

       /**
        * Returns the directory values for the client as {@link ClientBuilderOptions}.
        *
        * @return   See above.
        */
       public abstract ClientBuilderOptions getDirOptions();

       /**
        * Get the authentication mode for this spawner.
        *
        * @return   {@code true} indicating that the user's password is required for authentication.
        */
       public abstract boolean isPasswordAuthentication();

       /**
        * Get process assigned UUID.
        *
        * @return  The assigned UUID.
        */
       public String getUuid()
       {
          return uuid;
       }

       /**
        * Get OS user name.
        *
        * @return  The OS user name.
        */
       public String getOsUser()
       {
          return osUser;
       }

       /**
        * Get OS user password;
        *
        * @return  The OS user password.
        */
       public String getOsPass()
       {
          return osPass;
       }

       /**
        * Get the server secure port;
        *
        * @return  The server secure port.
        */
       public int getSecurePort()
       {
          return securePort;
       }

       /**
        * Get the server alias;
        *
        * @return  The server alias.
        */
       public String getServerAlias()
       {
          return serverAlias;
       }
    }