ProcessAccount.java

/*
** Module   : ProcessAccount.java
** Abstract : represents an application or server process account
**
** Copyright (c) 2005-2017, Golden Code Development Corporation.
**
** -#- -I- --Date-- --JPRM-- --------------------------Description--------------------------------
** 001 NVS 20050307   @20199 Created. Process account extends account and
**                           represents P2j application accounts. 
** 002 NVS 20050311   @20285 Constructor now accepts Booleans which can be
**                           nulls.
** 003 NVS 20050311   @20296 Methods scope changed to package private.
** 004 GES 20081104   @40340 Moved common code into the base class.
** 005 NVS 20090603   @42591 Provide enabled account status info for super().
** 006 CA  20130529          Added appserver support.
** 007 CA  20140206          Changed H006: appserver agents can be started only from P2J processes.
** 008 MAG 20140715          Added broker support.
*/ 
/*
** 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.security;

/**
 * Represents an application or server process account.  This is a
 * non-interactive account, but it can login and it can be assigned specific
 * rights as a valid entity in the system.
 * <p>
 * WARNING: at this time process accounts cannot be assigned to groups.  This
 * is something that will be fixed in a future enhancement. 
 */
class ProcessAccount
extends Account
{
   /** Server or application flag. */
   private boolean isServer = false;

   /** Master Server flag. */
   private boolean isMaster = false;
   
   /** The name of the app server. May be <code>null</code>. */
   private String appServer = null;
   
   /** Broker name if any */
   private String broker = null;

   /**
    * Constructor.
    *
    * @param    subjectId
    *           subject ID also known as account name
    * @param    enabled
    *           <code>true</code> if this account is enabled
    * @param    description
    *           text that describes the purpose of this application; may be <code>null</code>
    * @param    alias
    *           truststore alias associated with this application's certificate; 
    *           may be <code>null</code>
    * @param    isServer
    *           flag indicating server vs application; may be <code>null</code>
    * @param    isMaster
    *           flag indicating master server; may be <code>null</code>
    * @param    appServer
    *           The name of the App Server. May be <code>null</code>.
    */
   ProcessAccount(String  subjectId,
                  boolean enabled,
                  String  description,
                  String  alias, 
                  Boolean isServer,
                  Boolean isMaster,
                  String  appServer,
                  String  broker)
   {
      super(subjectId, enabled, description, alias);
      
      this.appServer = appServer;
      this.broker = broker;

      if (isServer == null)
      {
         this.isServer = false;
         this.isMaster = false;
      }
      else
      {
         this.isServer = isServer.booleanValue();
         if (this.isServer)
            this.isMaster = isMaster.booleanValue();
         else
            this.isMaster = false;
      }
   }

   /**
    * Gets the account type of this account
    *
    * @return   The <code>ACC_PROCESS</code> constant.
    */
   int getAccountType()
   {
      return ACC_PROCESS;
   }

   /**
    * Gets server or application flag
    *
    * @return <code>true</code> if it is a server
    */
   boolean isServer()
   {
      return isServer;
   }

   /**
    * Gets master server flag
    *
    * @return <code>true</code> if it is a master server
    */
   boolean isMaster()
   {
      return isMaster;
   }
   
   /**
    * Get the appserver name associated with this account.
    * 
    * @return    The {@link #appServer} name.
    */
   String getAppServer()
   {
      return appServer;
   }

   /**
    * Get the broker name associated with this account.
    * 
    * @return    Broker name.
    */
   String getBroker()
   {
      return broker;
   }
}