# LegacyProxyClientConfig.java

    /*
    ** Module   : LegacyProxyClientConfig.java
    ** Abstract : Contains details about a legacy 4GL external program exposed as a legacy open client proxy.
    **
    ** Copyright (c) 2020-2022, Golden Code Development Corporation.
    **
    ** -#- -I- --Date-- ---------------------------------------Description----------------------------------------
    ** 001 CA  20201008 Created initial version.
    ** 002 CA  20220427 Added support for non-persistent, SINGLETON, SINGLE-RUN and SubAppObject mode.
    */

    /*
    ** 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.pattern;

    /**
     * Specifies details about an external program exposed as a legacy proxy open client, to generate its Java
     * code.
     */
    public class LegacyProxyClientConfig
    {
       /** Flag indicating if the program is ran PERSISTENT. */
       private final boolean persistent;

       /** Flag indicating if the program is ran SINGLETON. */
       private final boolean singleton;

       /** Flag indicating if the program is ran SINGLE-RUN. */
       private final boolean singleRun;

       /** The program name (without extension). */
       private final String name;

       /** The definition folder for this external program. */
       private final String folder;

       /** The JAST file name used to generate its Java code. */
       private String astFilename;

       /** The full program name, including folder. */
       private final String fullName;

       /** The Java package for the proxy program. */
       private final String pkg;

       /** The Java name of the (Sub)AppObject where this program is configured. */
       private final String appObject;

       /** The legacy name of the (Sub)AppObject where this program is configured. */
       private final String legacyName;

       /** Flag indicating if unknown arguments are allowed. */
       private final boolean allowUnknown;

       /** The program file's extension.*/
       private final String progExt;

       /**
        * Initialize this instance.
        *
        * @param    folder
        *           The external program definition folder.
        * @param    name
        *           The program name.
        * @param    fullName
        *           The full name, including folder.
        * @param    progExt
        *           The program file's extension.
        * @param    procType
        *           The procedure type
        * @param    legacyName
        *           The legacy name of the (Sub)AppObject where this program is configured.
        * @param    appObject
        *           The Java name of the (Sub)AppObject where this program is configured.
        * @param    pkg
        *           The Java package for the proxy program.
        * @param    allowUnknown
        *           Flag indicating if unknown arguments are allowed.
        */
       public LegacyProxyClientConfig(String  folder,
                                      String  name,
                                      String  fullName,
                                      String  progExt,
                                      int     procType,
                                      String  legacyName,
                                      String  appObject,
                                      String  pkg,
                                      boolean allowUnknown)
       {
          this.name = name;
          this.folder = folder;
          this.fullName = fullName;
          this.progExt = progExt;
          this.legacyName = legacyName;
          this.appObject = appObject;
          this.pkg = pkg;
          this.allowUnknown = allowUnknown;

          this.persistent = procType == 2;
          this.singleRun = procType == 3;
          this.singleton = procType == 4;
       }

       /**
        * Get the full name (including folder).
        *
        * @return   See above.
        */
       public String getFullName()
       {
          return fullName;
       }

       /**
        * Get the program file' extension.
        *
        * @return   See above.
        */
       public String getProgExt()
       {
          return progExt;
       }

       /**
        * Get the external program's definition folder.
        *
        * @return   See above.
        */
       public String getFolder()
       {
          return folder;
       }

       /**
        * Get the external program base name.
        *
        * @return   See above.
        */
       public String getName()
       {
          return name;
       }

       /**
        * Check if this program is ran persistent.
        *
        * @return   See above.
        */
       public boolean isPersistent()
       {
          return persistent;
       }

       /**
        * Check if this program is ran SINGLETON.
        *
        * @return   See above.
        */
       public boolean isSingleton()
       {
          return singleton;
       }

       /**
        * Check if this program is ran SINGLE-RUN.
        *
        * @return   See above.
        */
       public boolean isSingleRun()
       {
          return singleRun;
       }

       /**
        * Get the Java package for this proxy program.
        *
        * @return   See above.
        */
       public String getPkg()
       {
          return pkg;
       }

       /**
        * Get the Java name of the (Sub)AppObject where this program is configured
        *
        * @return   See above.
        */
       public String getAppObject()
       {
          return appObject;
       }

       /**
        * Get the legacy name of the (Sub)AppObject where this program is configured
        *
        * @return   See above.
        */
       public String getLegacyName()
       {
          return legacyName;
       }

       /**
        * Check if unknowns are allowed.
        *
        * @return   See above.
        */
       public boolean isAllowUnknown()
       {
          return allowUnknown;
       }

       /**
        * Get the {@link #astFilename}.
        *
        * @return   See above.
        */
       public String getAstFilename()
       {
          return astFilename;
       }

       /**
        * Set the JAST file name.
        *
        * @param    astFilename
        *           Full path for the JAST file.
        */
       public void setAstFilename(String astFilename)
       {
          this.astFilename = astFilename;
       }
    }