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;
   }
}