# Account.java

    /*
    ** Module   : Account.java
    ** Abstract : Abstract class that represents a security account.
    **
    ** Copyright (c) 2005-2017, Golden Code Development Corporation.
    **
    ** -#- -I- --Date-- --JPRM-- --------------------------Description--------------------------------
    ** 001 NVS 20050307   @20193 Created the initial version.
    ** 002 NVS 20050311   @20292 Added abstract method getAlias().
    ** 003 NVS 20060412   @25491 Added new constant, ACC_ALL.
    ** 004 GES 20081104   @40338 Moved common code here from subclasses.
    ** 005 NVS 20090603   @42589 Added new member, enabled, and related methods
    **                           isEnabled(), setEnabled().
    ** 006 SVL 20100920          The class was made public.
    ** 007 CA  20130529          Added appserver support.
    ** 008 CA  20140206          Back out H007: appserver agents can be started only from P2J
    **                           processes.
    */
    /*
    ** 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;

    /**
     * Abstract class representing a security account.
     */
    public abstract class Account
    {
       /** Account type - process. */
       public static final int ACC_PROCESS = 0;

       /** Account type - user. */
       public static final int ACC_USER = 1;

       /** Aaccount type - group. */
       public static final int ACC_GROUP = 2;

       /** Account selection type - all. */
       public static final int ACC_ALL = 3;

       /** The subject ID this account represents. */
       private String subjectId = null;

       /** Text description of this group. */
       private String description = null;

       /** Truststore alias of the associated certificate entry. */
       private String alias = null;

       /** Enabled status of this account. */
       private boolean enabled = true;

       /**
        * Constructor.
        *
        * @param    subjectId
        *           The account's subject ID (also known as account name).
        * @param    enabled
        *           <code>true</code> if this account is enabled
        * @param    description
        *           The verbose description of the account.
        * @param    alias
        *           The certificate entry name for this account in the truststore
        *           This may be <code>null</code>.
        */
       Account(String subjectId, boolean enabled, String description, String alias)
       {
          this.subjectId   = subjectId;
          this.description = description;
          this.alias       = alias;
          this.enabled     = enabled;
       }

       /**
        * Gets the enabled status of this account.
        * Only the user and process accounts can be disabled. Disabled accounts
        * can't be authenticated successfully.
        *
        * @return   <code>true</code> if the account is enabled
        */
       boolean isEnabled()
       {
          return enabled;
       }

       /**
        * Changes the enabled status of this account.
        *
        * @param enabled
        *        <code>true</code> if the account is enabled
        */
       void setEnabled(boolean enabled)
       {
          this.enabled = enabled;
       }

       /**
        * Gets the subject ID for this account.
        *
        * @return   The subject ID.
        */
       String getSubjectId()
       {
          return subjectId;
       }

       /**
        * Gets the verbose description for this account.
        *
        * @return   The description.
        */
       String getDescription()
       {
          return description;
       }

       /**
        * Gets the certificate entry alias in the trust store for this account.
        *
        * @return   The alias if defined or <code>null</code>.
        */
       String getAlias()
       {
          return alias;
       }

       /**
        * Gets the account type of this account.
        *
        * @return   The account type as one of the <code>ACC_*</code> constants.
        */
       abstract int getAccountType();
    }