/*
 * IMPORTANT!!!! XSL Autogenerated class, DO NOT EDIT!!!!!
 * Template: Infrastructure8.2 rev3 [oneit.objstore.BusinessObjectTemplate.xsl]
 *
 *   Version: 1.0
 *   Vendor: Apache Software Foundation (Xalan XSLTC)
 *   Vendor URL: http://xml.apache.org/xalan-j
 */


    package performa.orm;

import java.io.*;
import java.util.*;
import oneit.appservices.config.*;
import oneit.logging.*;
import oneit.objstore.*;
import oneit.objstore.assocs.*;
import oneit.objstore.attributes.*;
import oneit.objstore.rdbms.filters.*;
import oneit.objstore.parser.*;
import oneit.objstore.validator.*;
import oneit.objstore.utils.*;
import oneit.utils.*;
import oneit.utils.filter.Filter;
import oneit.utils.transform.*;
import oneit.utils.parsers.FieldException;

import performa.orm.types.*;

import performa.orm.types.TimeZone;

import oneit.business.shopping.orm.*;



public abstract class BaseHiringTeam extends BaseBusinessClass
{
    // Reference instance for the object
    public static final HiringTeam REFERENCE_HiringTeam = new HiringTeam ();

    // Reference instance for the object
    public static final HiringTeam DUMMY_HiringTeam = new DummyHiringTeam ();

    // Static constants corresponding to field names
    
    public static final String FIELD_HiringTeamName = "HiringTeamName";
    public static final String FIELD_HiringTeamLogo = "HiringTeamLogo";
    public static final String FIELD_HiringTeamType = "HiringTeamType";
    public static final String FIELD_Industry = "Industry";
    public static final String FIELD_TimeZone = "TimeZone";
    public static final String FIELD_State = "State";
    public static final String FIELD_Country = "Country";
    public static final String FIELD_PostCode = "PostCode";
    public static final String FIELD_City = "City";
    public static final String FIELD_HasClientSupport = "HasClientSupport";
    public static final String FIELD_ManageOwnBilling = "ManageOwnBilling";
    public static final String FIELD_StripeReference = "StripeReference";
    public static final String FIELD_StripeSubscription = "StripeSubscription";
    public static final String FIELD_StripeFixedSubItem = "StripeFixedSubItem";
    public static final String FIELD_StripeMeteredSubItem = "StripeMeteredSubItem";
    public static final String FIELD_NameOnCard = "NameOnCard";
    public static final String FIELD_CardPostCode = "CardPostCode";
    public static final String FIELD_CardID = "CardID";
    public static final String FIELD_PlanRenewedOn = "PlanRenewedOn";
    public static final String FIELD_UsedCredits = "UsedCredits";
    public static final String FIELD_AvailableCredits = "AvailableCredits";
    public static final String FIELD_IsPPJ = "IsPPJ";
    public static final String FIELD_HasCap = "HasCap";
    public static final String FIELD_MaxCap = "MaxCap";
    public static final String FIELD_CouponExpiryDate = "CouponExpiryDate";
    public static final String FIELD_LastPlanAmount = "LastPlanAmount";
    public static final String FIELD_IsLogoDeleted = "IsLogoDeleted";
    public static final String FIELD_CouponCode = "CouponCode";
    public static final String FIELD_StripeBrand = "StripeBrand";
    public static final String FIELD_StripeLast4 = "StripeLast4";
    public static final String SINGLEREFERENCE_Company = "Company";
    public static final String BACKREF_Company = "";
    public static final String SINGLEREFERENCE_BilledByTeam = "BilledByTeam";
    public static final String BACKREF_BilledByTeam = "";
    public static final String SINGLEREFERENCE_AddedByUser = "AddedByUser";
    public static final String SINGLEREFERENCE_PaymentPlan = "PaymentPlan";
    public static final String SINGLEREFERENCE_Coupon = "Coupon";
    public static final String MULTIPLEREFERENCE_Users = "Users";
    public static final String BACKREF_Users = "";
    public static final String MULTIPLEREFERENCE_Clients = "Clients";
    public static final String BACKREF_Clients = "";
    public static final String MULTIPLEREFERENCE_BillingTeams = "BillingTeams";
    public static final String BACKREF_BillingTeams = "";

    // Static constants corresponding to searches
    public static final String SEARCH_All = "All";
    

    // Static constants corresponding to attribute helpers
    private static final DefaultAttributeHelper<HiringTeam> HELPER_HiringTeamName = DefaultAttributeHelper.INSTANCE;
    private static final BLOBAttributeHelper HELPER_HiringTeamLogo = BLOBAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<HiringTeam, HiringTeamType> HELPER_HiringTeamType =  new EnumeratedAttributeHelper<HiringTeam, HiringTeamType> (HiringTeamType.FACTORY_HiringTeamType);
    private static final EnumeratedAttributeHelper<HiringTeam, Industry> HELPER_Industry =  new EnumeratedAttributeHelper<HiringTeam, Industry> (Industry.FACTORY_Industry);
    private static final EnumeratedAttributeHelper<HiringTeam, TimeZone> HELPER_TimeZone =  new EnumeratedAttributeHelper<HiringTeam, TimeZone> (TimeZone.FACTORY_TimeZone);
    private static final EnumeratedAttributeHelper<HiringTeam, State> HELPER_State =  new EnumeratedAttributeHelper<HiringTeam, State> (State.FACTORY_State);
    private static final EnumeratedAttributeHelper<HiringTeam, Countries> HELPER_Country =  new EnumeratedAttributeHelper<HiringTeam, Countries> (Countries.FACTORY_Countries);
    private static final DefaultAttributeHelper<HiringTeam> HELPER_PostCode = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_City = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_HasClientSupport = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_ManageOwnBilling = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeReference = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeSubscription = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeFixedSubItem = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeMeteredSubItem = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_NameOnCard = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_CardPostCode = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_CardID = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_PlanRenewedOn = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_UsedCredits = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_AvailableCredits = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_IsPPJ = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_HasCap = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_MaxCap = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_CouponExpiryDate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_LastPlanAmount = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_IsLogoDeleted = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_CouponCode = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeBrand = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<HiringTeam> HELPER_StripeLast4 = DefaultAttributeHelper.INSTANCE;
    

    // Private attributes corresponding to business object data
    private String _HiringTeamName;
    private BinaryContent _HiringTeamLogo;
    private HiringTeamType _HiringTeamType;
    private Industry _Industry;
    private TimeZone _TimeZone;
    private State _State;
    private Countries _Country;
    private String _PostCode;
    private String _City;
    private Boolean _HasClientSupport;
    private Boolean _ManageOwnBilling;
    private String _StripeReference;
    private String _StripeSubscription;
    private String _StripeFixedSubItem;
    private String _StripeMeteredSubItem;
    private String _NameOnCard;
    private String _CardPostCode;
    private String _CardID;
    private Date _PlanRenewedOn;
    private Integer _UsedCredits;
    private Integer _AvailableCredits;
    private Boolean _IsPPJ;
    private Boolean _HasCap;
    private Integer _MaxCap;
    private Date _CouponExpiryDate;
    private Double _LastPlanAmount;
    private Boolean _IsLogoDeleted;
    private String _CouponCode;
    private String _StripeBrand;
    private String _StripeLast4;
    

    // Private attributes corresponding to single references
    private SingleAssociation<HiringTeam, Company> _Company;
    private SingleAssociation<HiringTeam, HiringTeam> _BilledByTeam;
    private SingleAssociation<HiringTeam, CompanyUser> _AddedByUser;
    private SingleAssociation<HiringTeam, PaymentPlan> _PaymentPlan;
    private SingleAssociation<HiringTeam, StripeCoupon> _Coupon;
    

    // Private attributes corresponding to multiple references
    private MultipleAssociation<HiringTeam, CompanyUserHiringTeamLink> _Users;
    private MultipleAssociation<HiringTeam, Client> _Clients;
    private MultipleAssociation<HiringTeam, HiringTeam> _BillingTeams;
    

    // Map of maps of metadata
    private static final Map ATTRIBUTES_METADATA_HiringTeam = new HashMap ();

    // Arrays of validators for each attribute
    private static final AttributeValidator[] FIELD_IsLogoDeleted_Validators;
    private static final AttributeValidator[] FIELD_CouponCode_Validators;
    private static final AttributeValidator[] FIELD_StripeBrand_Validators;
    private static final AttributeValidator[] FIELD_StripeLast4_Validators;
    private static final AttributeValidator[] FIELD_HiringTeamName_Validators;
    private static final AttributeValidator[] FIELD_HiringTeamLogo_Validators;
    private static final AttributeValidator[] FIELD_HiringTeamType_Validators;
    private static final AttributeValidator[] FIELD_Industry_Validators;
    private static final AttributeValidator[] FIELD_TimeZone_Validators;
    private static final AttributeValidator[] FIELD_State_Validators;
    private static final AttributeValidator[] FIELD_Country_Validators;
    private static final AttributeValidator[] FIELD_PostCode_Validators;
    private static final AttributeValidator[] FIELD_City_Validators;
    private static final AttributeValidator[] FIELD_HasClientSupport_Validators;
    private static final AttributeValidator[] FIELD_ManageOwnBilling_Validators;
    private static final AttributeValidator[] FIELD_StripeReference_Validators;
    private static final AttributeValidator[] FIELD_StripeSubscription_Validators;
    private static final AttributeValidator[] FIELD_StripeFixedSubItem_Validators;
    private static final AttributeValidator[] FIELD_StripeMeteredSubItem_Validators;
    private static final AttributeValidator[] FIELD_NameOnCard_Validators;
    private static final AttributeValidator[] FIELD_CardPostCode_Validators;
    private static final AttributeValidator[] FIELD_CardID_Validators;
    private static final AttributeValidator[] FIELD_PlanRenewedOn_Validators;
    private static final AttributeValidator[] FIELD_UsedCredits_Validators;
    private static final AttributeValidator[] FIELD_AvailableCredits_Validators;
    private static final AttributeValidator[] FIELD_IsPPJ_Validators;
    private static final AttributeValidator[] FIELD_HasCap_Validators;
    private static final AttributeValidator[] FIELD_MaxCap_Validators;
    private static final AttributeValidator[] FIELD_CouponExpiryDate_Validators;
    private static final AttributeValidator[] FIELD_LastPlanAmount_Validators;
    

    // Arrays of behaviour decorators
    private static final HiringTeamBehaviourDecorator[] HiringTeam_BehaviourDecorators;
    
    static
    {
        try
        {
            
            String tmp_Users = CompanyUserHiringTeamLink.BACKREF_HiringTeam;
            String tmp_Clients = Client.BACKREF_HiringTeam;
            String tmp_BillingTeams = HiringTeam.BACKREF_BilledByTeam;
            String tmp_Company = Company.BACKREF_HiringTeams;
            String tmp_BilledByTeam = HiringTeam.BACKREF_BillingTeams;
            
            Map  validatorMapping = ((Map)ConfigMgr.getConfigObject ("CONFIG.ORMVALIDATOR", "ValidatorMapping"));

            setupAssocMetaData_Users();
            setupAssocMetaData_Clients();
            setupAssocMetaData_BillingTeams();
            setupAssocMetaData_Company();
            setupAssocMetaData_BilledByTeam();
            setupAssocMetaData_AddedByUser();
            setupAssocMetaData_PaymentPlan();
            setupAssocMetaData_Coupon();
            FIELD_IsLogoDeleted_Validators = (AttributeValidator[])setupAttribMetaData_IsLogoDeleted(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CouponCode_Validators = (AttributeValidator[])setupAttribMetaData_CouponCode(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeBrand_Validators = (AttributeValidator[])setupAttribMetaData_StripeBrand(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeLast4_Validators = (AttributeValidator[])setupAttribMetaData_StripeLast4(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_HiringTeamName_Validators = (AttributeValidator[])setupAttribMetaData_HiringTeamName(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_HiringTeamLogo_Validators = (AttributeValidator[])setupAttribMetaData_HiringTeamLogo(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_HiringTeamType_Validators = (AttributeValidator[])setupAttribMetaData_HiringTeamType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Industry_Validators = (AttributeValidator[])setupAttribMetaData_Industry(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_TimeZone_Validators = (AttributeValidator[])setupAttribMetaData_TimeZone(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_State_Validators = (AttributeValidator[])setupAttribMetaData_State(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Country_Validators = (AttributeValidator[])setupAttribMetaData_Country(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_PostCode_Validators = (AttributeValidator[])setupAttribMetaData_PostCode(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_City_Validators = (AttributeValidator[])setupAttribMetaData_City(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_HasClientSupport_Validators = (AttributeValidator[])setupAttribMetaData_HasClientSupport(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ManageOwnBilling_Validators = (AttributeValidator[])setupAttribMetaData_ManageOwnBilling(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeReference_Validators = (AttributeValidator[])setupAttribMetaData_StripeReference(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeSubscription_Validators = (AttributeValidator[])setupAttribMetaData_StripeSubscription(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeFixedSubItem_Validators = (AttributeValidator[])setupAttribMetaData_StripeFixedSubItem(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_StripeMeteredSubItem_Validators = (AttributeValidator[])setupAttribMetaData_StripeMeteredSubItem(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_NameOnCard_Validators = (AttributeValidator[])setupAttribMetaData_NameOnCard(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CardPostCode_Validators = (AttributeValidator[])setupAttribMetaData_CardPostCode(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CardID_Validators = (AttributeValidator[])setupAttribMetaData_CardID(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_PlanRenewedOn_Validators = (AttributeValidator[])setupAttribMetaData_PlanRenewedOn(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_UsedCredits_Validators = (AttributeValidator[])setupAttribMetaData_UsedCredits(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_AvailableCredits_Validators = (AttributeValidator[])setupAttribMetaData_AvailableCredits(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_IsPPJ_Validators = (AttributeValidator[])setupAttribMetaData_IsPPJ(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_HasCap_Validators = (AttributeValidator[])setupAttribMetaData_HasCap(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_MaxCap_Validators = (AttributeValidator[])setupAttribMetaData_MaxCap(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CouponExpiryDate_Validators = (AttributeValidator[])setupAttribMetaData_CouponExpiryDate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_LastPlanAmount_Validators = (AttributeValidator[])setupAttribMetaData_LastPlanAmount(validatorMapping).toArray (new AttributeValidator[0]);
            

            REFERENCE_HiringTeam.initialiseReference ();
            DUMMY_HiringTeam.initialiseReference ();
            HiringTeam_BehaviourDecorators = BaseBusinessClass.getBBCBehaviours(HiringTeam.class).toArray(new HiringTeamBehaviourDecorator[0]);
        }
        catch (RuntimeException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR1, e, "Error initialising");
            throw e;
        }
    }

    
    // Meta Info setup
    private static void setupAssocMetaData_Users()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "HiringTeam");
        metaInfo.put ("name", "Users");
        metaInfo.put ("type", "CompanyUserHiringTeamLink");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Users:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (MULTIPLEREFERENCE_Users, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Clients()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "HiringTeam");
        metaInfo.put ("name", "Clients");
        metaInfo.put ("type", "Client");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Clients:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (MULTIPLEREFERENCE_Clients, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_BillingTeams()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "BilledByTeam");
        metaInfo.put ("name", "BillingTeams");
        metaInfo.put ("type", "HiringTeam");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.BillingTeams:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (MULTIPLEREFERENCE_BillingTeams, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Company()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "HiringTeams");
        metaInfo.put ("dbcol", "company_id");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "Company");
        metaInfo.put ("type", "Company");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Company:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (SINGLEREFERENCE_Company, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_BilledByTeam()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "BillingTeams");
        metaInfo.put ("dbcol", "billing_team_id");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "BilledByTeam");
        metaInfo.put ("type", "HiringTeam");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.BilledByTeam:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (SINGLEREFERENCE_BilledByTeam, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_AddedByUser()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "added_by_user_id");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "AddedByUser");
        metaInfo.put ("type", "CompanyUser");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.AddedByUser:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (SINGLEREFERENCE_AddedByUser, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_PaymentPlan()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "payment_plan_id");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "PaymentPlan");
        metaInfo.put ("type", "PaymentPlan");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.PaymentPlan:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (SINGLEREFERENCE_PaymentPlan, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Coupon()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "coupon_id");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "Coupon");
        metaInfo.put ("type", "StripeCoupon");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Coupon:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (SINGLEREFERENCE_Coupon, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static List setupAttribMetaData_IsLogoDeleted(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "IsLogoDeleted");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.IsLogoDeleted:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_IsLogoDeleted, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "IsLogoDeleted", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.IsLogoDeleted:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_CouponCode(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("length", "20");
        metaInfo.put ("name", "CouponCode");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.CouponCode:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_CouponCode, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "CouponCode", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.CouponCode:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeBrand(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("name", "StripeBrand");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeBrand:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeBrand, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeBrand", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeBrand:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeLast4(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("name", "StripeLast4");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeLast4:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeLast4, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeLast4", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeLast4:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_HiringTeamName(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "hiring_team_name");
        metaInfo.put ("length", "100");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "HiringTeamName");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.HiringTeamName:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_HiringTeamName, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "HiringTeamName", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.HiringTeamName:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_HiringTeamLogo(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "BLOBAttributeHelper");
        metaInfo.put ("attribHelperInstance", "BLOBAttributeHelper.INSTANCE");
        metaInfo.put ("binaryHandler", "loggedin");
        metaInfo.put ("dbcol", "hiring_team_logo");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "HiringTeamLogo");
        metaInfo.put ("type", "BinaryContent");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.HiringTeamLogo:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_HiringTeamLogo, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "HiringTeamLogo", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.HiringTeamLogo:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_HiringTeamType(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "hiring_team_type");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "HiringTeamType");
        metaInfo.put ("type", "HiringTeamType");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.HiringTeamType:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_HiringTeamType, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "HiringTeamType", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.HiringTeamType:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_Industry(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "industry");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "Industry");
        metaInfo.put ("type", "Industry");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Industry:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_Industry, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "Industry", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.Industry:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_TimeZone(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "time_zone");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "TimeZone");
        metaInfo.put ("type", "TimeZone");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.TimeZone:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_TimeZone, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "TimeZone", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.TimeZone:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_State(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "state");
        metaInfo.put ("defaultValue", "State.WA");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "State");
        metaInfo.put ("type", "State");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.State:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_State, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "State", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.State:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_Country(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "country");
        metaInfo.put ("defaultValue", "Countries.AU");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "Country");
        metaInfo.put ("type", "Countries");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.Country:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_Country, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "Country", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.Country:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_PostCode(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "post_code");
        metaInfo.put ("length", "10");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "PostCode");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.PostCode:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_PostCode, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "PostCode", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.PostCode:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_City(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "city");
        metaInfo.put ("length", "100");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "City");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.City:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_City, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "City", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.City:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_HasClientSupport(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "has_client_support");
        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "HasClientSupport");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.HasClientSupport:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_HasClientSupport, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "HasClientSupport", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.HasClientSupport:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_ManageOwnBilling(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "manage_own_billing");
        metaInfo.put ("defaultValue", "Boolean.TRUE");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "ManageOwnBilling");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.ManageOwnBilling:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_ManageOwnBilling, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "ManageOwnBilling", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.ManageOwnBilling:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeReference(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "stripe_reference");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "StripeReference");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeReference:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeReference, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeReference", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeReference:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeSubscription(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "stripe_subscription");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "StripeSubscription");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeSubscription:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeSubscription, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeSubscription", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeSubscription:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeFixedSubItem(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "stripe_fixed_sub_item");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "StripeFixedSubItem");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeFixedSubItem:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeFixedSubItem, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeFixedSubItem", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeFixedSubItem:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_StripeMeteredSubItem(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "stripe_metered_sub_item");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "StripeMeteredSubItem");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.StripeMeteredSubItem:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_StripeMeteredSubItem, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "StripeMeteredSubItem", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.StripeMeteredSubItem:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_NameOnCard(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "name_on_card");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "NameOnCard");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.NameOnCard:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_NameOnCard, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "NameOnCard", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.NameOnCard:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_CardPostCode(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "card_post_code");
        metaInfo.put ("length", "10");
        metaInfo.put ("name", "CardPostCode");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.CardPostCode:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_CardPostCode, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "CardPostCode", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.CardPostCode:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_CardID(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "card_id");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "CardID");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.CardID:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_CardID, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "CardID", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.CardID:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_PlanRenewedOn(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "plan_renewed_on");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "PlanRenewedOn");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.PlanRenewedOn:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_PlanRenewedOn, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "PlanRenewedOn", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.PlanRenewedOn:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_UsedCredits(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "used_credits");
        metaInfo.put ("name", "UsedCredits");
        metaInfo.put ("type", "Integer");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.UsedCredits:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_UsedCredits, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "UsedCredits", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.UsedCredits:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_AvailableCredits(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "available_credits");
        metaInfo.put ("name", "AvailableCredits");
        metaInfo.put ("type", "Integer");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.AvailableCredits:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_AvailableCredits, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "AvailableCredits", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.AvailableCredits:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_IsPPJ(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "is_ppj");
        metaInfo.put ("defaultValue", "Boolean.TRUE");
        metaInfo.put ("name", "IsPPJ");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.IsPPJ:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_IsPPJ, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "IsPPJ", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.IsPPJ:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_HasCap(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "has_cap");
        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "HasCap");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.HasCap:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_HasCap, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "HasCap", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.HasCap:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_MaxCap(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "max_cap");
        metaInfo.put ("name", "MaxCap");
        metaInfo.put ("type", "Integer");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.MaxCap:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_MaxCap, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "MaxCap", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.MaxCap:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_CouponExpiryDate(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "coupon_expiry_date");
        metaInfo.put ("name", "CouponExpiryDate");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.CouponExpiryDate:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_CouponExpiryDate, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "CouponExpiryDate", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.CouponExpiryDate:", validators);        

        return validators;
    }
    
    // Meta Info setup
    private static List setupAttribMetaData_LastPlanAmount(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("dbcol", "last_plan_amount");
        metaInfo.put ("name", "LastPlanAmount");
        metaInfo.put ("type", "Double");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for HiringTeam.LastPlanAmount:", metaInfo);
        ATTRIBUTES_METADATA_HiringTeam.put (FIELD_LastPlanAmount, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(HiringTeam.class, "LastPlanAmount", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for HiringTeam.LastPlanAmount:", validators);        

        return validators;
    }
    
    // END OF STATIC METADATA DEFINITION    
    
    
    
    // This constructor should not be called
    protected BaseHiringTeam ()
    {
    }


    protected BBCBehaviourDecorator[] getBehaviours()
    {
        return HiringTeam_BehaviourDecorators;
    }
    
    


    


    // Initialise the attributes
    protected void _initialiseNewObjAttributes (ObjectTransaction transaction) throws StorageException
    {
        super._initialiseNewObjAttributes (transaction);

        
        _HiringTeamName = (String)(HELPER_HiringTeamName.initialise (_HiringTeamName));
        _HiringTeamLogo = (BinaryContent)(HELPER_HiringTeamLogo.initialise (_HiringTeamLogo));
        _HiringTeamType = (HiringTeamType)(HELPER_HiringTeamType.initialise (_HiringTeamType));
        _Industry = (Industry)(HELPER_Industry.initialise (_Industry));
        _TimeZone = (TimeZone)(HELPER_TimeZone.initialise (_TimeZone));
        _State = (State)(State.WA);
        _Country = (Countries)(Countries.AU);
        _PostCode = (String)(HELPER_PostCode.initialise (_PostCode));
        _City = (String)(HELPER_City.initialise (_City));
        _HasClientSupport = (Boolean)(Boolean.FALSE);
        _ManageOwnBilling = (Boolean)(Boolean.TRUE);
        _StripeReference = (String)(HELPER_StripeReference.initialise (_StripeReference));
        _StripeSubscription = (String)(HELPER_StripeSubscription.initialise (_StripeSubscription));
        _StripeFixedSubItem = (String)(HELPER_StripeFixedSubItem.initialise (_StripeFixedSubItem));
        _StripeMeteredSubItem = (String)(HELPER_StripeMeteredSubItem.initialise (_StripeMeteredSubItem));
        _NameOnCard = (String)(HELPER_NameOnCard.initialise (_NameOnCard));
        _CardPostCode = (String)(HELPER_CardPostCode.initialise (_CardPostCode));
        _CardID = (String)(HELPER_CardID.initialise (_CardID));
        _PlanRenewedOn = (Date)(HELPER_PlanRenewedOn.initialise (_PlanRenewedOn));
        _UsedCredits = (Integer)(HELPER_UsedCredits.initialise (_UsedCredits));
        _AvailableCredits = (Integer)(HELPER_AvailableCredits.initialise (_AvailableCredits));
        _IsPPJ = (Boolean)(Boolean.TRUE);
        _HasCap = (Boolean)(Boolean.FALSE);
        _MaxCap = (Integer)(HELPER_MaxCap.initialise (_MaxCap));
        _CouponExpiryDate = (Date)(HELPER_CouponExpiryDate.initialise (_CouponExpiryDate));
        _LastPlanAmount = (Double)(HELPER_LastPlanAmount.initialise (_LastPlanAmount));
        _IsLogoDeleted = (Boolean)(Boolean.FALSE);
        _CouponCode = (String)(HELPER_CouponCode.initialise (_CouponCode));
        _StripeBrand = (String)(HELPER_StripeBrand.initialise (_StripeBrand));
        _StripeLast4 = (String)(HELPER_StripeLast4.initialise (_StripeLast4));
    }


    // Initialise the associations
    protected void _initialiseAssociations ()
    {
        super._initialiseAssociations ();

        _Company = new SingleAssociation<HiringTeam, Company> (this, SINGLEREFERENCE_Company, Company.MULTIPLEREFERENCE_HiringTeams, Company.REFERENCE_Company, "tl_hiring_team");
        _BilledByTeam = new SingleAssociation<HiringTeam, HiringTeam> (this, SINGLEREFERENCE_BilledByTeam, HiringTeam.MULTIPLEREFERENCE_BillingTeams, HiringTeam.REFERENCE_HiringTeam, "tl_hiring_team");
        _AddedByUser = new SingleAssociation<HiringTeam, CompanyUser> (this, SINGLEREFERENCE_AddedByUser, null, CompanyUser.REFERENCE_CompanyUser, "tl_hiring_team");
        _PaymentPlan = new SingleAssociation<HiringTeam, PaymentPlan> (this, SINGLEREFERENCE_PaymentPlan, null, PaymentPlan.REFERENCE_PaymentPlan, "tl_hiring_team");
        _Coupon = new SingleAssociation<HiringTeam, StripeCoupon> (this, SINGLEREFERENCE_Coupon, null, StripeCoupon.REFERENCE_StripeCoupon, "tl_hiring_team");
        _Users = new MultipleAssociation<HiringTeam, CompanyUserHiringTeamLink> (this, MULTIPLEREFERENCE_Users, CompanyUserHiringTeamLink.SINGLEREFERENCE_HiringTeam, CompanyUserHiringTeamLink.REFERENCE_CompanyUserHiringTeamLink);
        _Clients = new MultipleAssociation<HiringTeam, Client> (this, MULTIPLEREFERENCE_Clients, Client.SINGLEREFERENCE_HiringTeam, Client.REFERENCE_Client);
        _BillingTeams = new MultipleAssociation<HiringTeam, HiringTeam> (this, MULTIPLEREFERENCE_BillingTeams, HiringTeam.SINGLEREFERENCE_BilledByTeam, HiringTeam.REFERENCE_HiringTeam);
        
    }


    // Initialise the associations
    protected BaseBusinessClass initialiseReference ()
    {
        super.initialiseReference ();
        
        _Company = new SingleAssociation<HiringTeam, Company> (this, SINGLEREFERENCE_Company, Company.MULTIPLEREFERENCE_HiringTeams, Company.REFERENCE_Company, "tl_hiring_team");
        _BilledByTeam = new SingleAssociation<HiringTeam, HiringTeam> (this, SINGLEREFERENCE_BilledByTeam, HiringTeam.MULTIPLEREFERENCE_BillingTeams, HiringTeam.REFERENCE_HiringTeam, "tl_hiring_team");
        _AddedByUser = new SingleAssociation<HiringTeam, CompanyUser> (this, SINGLEREFERENCE_AddedByUser, null, CompanyUser.REFERENCE_CompanyUser, "tl_hiring_team");
        _PaymentPlan = new SingleAssociation<HiringTeam, PaymentPlan> (this, SINGLEREFERENCE_PaymentPlan, null, PaymentPlan.REFERENCE_PaymentPlan, "tl_hiring_team");
        _Coupon = new SingleAssociation<HiringTeam, StripeCoupon> (this, SINGLEREFERENCE_Coupon, null, StripeCoupon.REFERENCE_StripeCoupon, "tl_hiring_team");
        _Users = new MultipleAssociation<HiringTeam, CompanyUserHiringTeamLink> (this, MULTIPLEREFERENCE_Users, CompanyUserHiringTeamLink.SINGLEREFERENCE_HiringTeam, CompanyUserHiringTeamLink.REFERENCE_CompanyUserHiringTeamLink);
        _Clients = new MultipleAssociation<HiringTeam, Client> (this, MULTIPLEREFERENCE_Clients, Client.SINGLEREFERENCE_HiringTeam, Client.REFERENCE_Client);
        _BillingTeams = new MultipleAssociation<HiringTeam, HiringTeam> (this, MULTIPLEREFERENCE_BillingTeams, HiringTeam.SINGLEREFERENCE_BilledByTeam, HiringTeam.REFERENCE_HiringTeam);
        
        
        return this;
    }

    

    /**
     * Get the attribute HiringTeamName
     */
    public String getHiringTeamName ()
    {
        assertValid();
        String valToReturn = _HiringTeamName;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getHiringTeamName ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preHiringTeamNameChange (String newHiringTeamName) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postHiringTeamNameChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_HiringTeamName ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute HiringTeamName.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setHiringTeamName (String newHiringTeamName) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_HiringTeamName.compare (_HiringTeamName, newHiringTeamName);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newHiringTeamName = bhd.setHiringTeamName ((HiringTeam)this, newHiringTeamName);
                oldAndNewIdentical = HELPER_HiringTeamName.compare (_HiringTeamName, newHiringTeamName);
            }

            BusinessObjectParser.assertFieldCondition (newHiringTeamName != null, this, FIELD_HiringTeamName, "mandatory");
            

            if (FIELD_HiringTeamName_Validators.length > 0)
            {
                Object newHiringTeamNameObj = HELPER_HiringTeamName.toObject (newHiringTeamName);

                if (newHiringTeamNameObj != null)
                {
                    int     loopMax = FIELD_HiringTeamName_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_HiringTeamName);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_HiringTeamName_Validators[v].checkAttribute (this, FIELD_HiringTeamName, metadata, newHiringTeamNameObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_HiringTeamName () != FieldWriteability.FALSE, "Field  HiringTeamName is not writeable");
            preHiringTeamNameChange (newHiringTeamName);
            markFieldChange (FIELD_HiringTeamName);
            _HiringTeamName = newHiringTeamName;            
            postFieldChange (FIELD_HiringTeamName);
            postHiringTeamNameChange ();
        }
    }

    /**
     * Get the attribute HiringTeamLogo
     */
    public BinaryContent getHiringTeamLogo ()
    {
        assertValid();
        BinaryContent valToReturn = _HiringTeamLogo;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getHiringTeamLogo ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preHiringTeamLogoChange (BinaryContent newHiringTeamLogo) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postHiringTeamLogoChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_HiringTeamLogo ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute HiringTeamLogo.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setHiringTeamLogo (BinaryContent newHiringTeamLogo) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_HiringTeamLogo.compare (_HiringTeamLogo, newHiringTeamLogo);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newHiringTeamLogo = bhd.setHiringTeamLogo ((HiringTeam)this, newHiringTeamLogo);
                oldAndNewIdentical = HELPER_HiringTeamLogo.compare (_HiringTeamLogo, newHiringTeamLogo);
            }

            

            if (FIELD_HiringTeamLogo_Validators.length > 0)
            {
                Object newHiringTeamLogoObj = HELPER_HiringTeamLogo.toObject (newHiringTeamLogo);

                if (newHiringTeamLogoObj != null)
                {
                    int     loopMax = FIELD_HiringTeamLogo_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_HiringTeamLogo);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_HiringTeamLogo_Validators[v].checkAttribute (this, FIELD_HiringTeamLogo, metadata, newHiringTeamLogoObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_HiringTeamLogo () != FieldWriteability.FALSE, "Field  HiringTeamLogo is not writeable");
            preHiringTeamLogoChange (newHiringTeamLogo);
            markFieldChange (FIELD_HiringTeamLogo);
            _HiringTeamLogo = newHiringTeamLogo;            
            postFieldChange (FIELD_HiringTeamLogo);
            postHiringTeamLogoChange ();
        }
    }

    /**
     * Get the attribute HiringTeamType
     */
    public HiringTeamType getHiringTeamType ()
    {
        assertValid();
        HiringTeamType valToReturn = _HiringTeamType;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getHiringTeamType ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preHiringTeamTypeChange (HiringTeamType newHiringTeamType) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postHiringTeamTypeChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_HiringTeamType ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute HiringTeamType.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setHiringTeamType (HiringTeamType newHiringTeamType) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_HiringTeamType.compare (_HiringTeamType, newHiringTeamType);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newHiringTeamType = bhd.setHiringTeamType ((HiringTeam)this, newHiringTeamType);
                oldAndNewIdentical = HELPER_HiringTeamType.compare (_HiringTeamType, newHiringTeamType);
            }

            

            if (FIELD_HiringTeamType_Validators.length > 0)
            {
                Object newHiringTeamTypeObj = HELPER_HiringTeamType.toObject (newHiringTeamType);

                if (newHiringTeamTypeObj != null)
                {
                    int     loopMax = FIELD_HiringTeamType_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_HiringTeamType);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_HiringTeamType_Validators[v].checkAttribute (this, FIELD_HiringTeamType, metadata, newHiringTeamTypeObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_HiringTeamType () != FieldWriteability.FALSE, "Field  HiringTeamType is not writeable");
            preHiringTeamTypeChange (newHiringTeamType);
            markFieldChange (FIELD_HiringTeamType);
            _HiringTeamType = newHiringTeamType;            
            postFieldChange (FIELD_HiringTeamType);
            postHiringTeamTypeChange ();
        }
    }

    /**
     * Get the attribute Industry
     */
    public Industry getIndustry ()
    {
        assertValid();
        Industry valToReturn = _Industry;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getIndustry ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preIndustryChange (Industry newIndustry) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postIndustryChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_Industry ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute Industry.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setIndustry (Industry newIndustry) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_Industry.compare (_Industry, newIndustry);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newIndustry = bhd.setIndustry ((HiringTeam)this, newIndustry);
                oldAndNewIdentical = HELPER_Industry.compare (_Industry, newIndustry);
            }

            

            if (FIELD_Industry_Validators.length > 0)
            {
                Object newIndustryObj = HELPER_Industry.toObject (newIndustry);

                if (newIndustryObj != null)
                {
                    int     loopMax = FIELD_Industry_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_Industry);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_Industry_Validators[v].checkAttribute (this, FIELD_Industry, metadata, newIndustryObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_Industry () != FieldWriteability.FALSE, "Field  Industry is not writeable");
            preIndustryChange (newIndustry);
            markFieldChange (FIELD_Industry);
            _Industry = newIndustry;            
            postFieldChange (FIELD_Industry);
            postIndustryChange ();
        }
    }

    /**
     * Get the attribute TimeZone
     */
    public TimeZone getTimeZone ()
    {
        assertValid();
        TimeZone valToReturn = _TimeZone;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getTimeZone ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preTimeZoneChange (TimeZone newTimeZone) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postTimeZoneChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_TimeZone ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute TimeZone.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setTimeZone (TimeZone newTimeZone) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_TimeZone.compare (_TimeZone, newTimeZone);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newTimeZone = bhd.setTimeZone ((HiringTeam)this, newTimeZone);
                oldAndNewIdentical = HELPER_TimeZone.compare (_TimeZone, newTimeZone);
            }

            

            if (FIELD_TimeZone_Validators.length > 0)
            {
                Object newTimeZoneObj = HELPER_TimeZone.toObject (newTimeZone);

                if (newTimeZoneObj != null)
                {
                    int     loopMax = FIELD_TimeZone_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_TimeZone);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_TimeZone_Validators[v].checkAttribute (this, FIELD_TimeZone, metadata, newTimeZoneObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_TimeZone () != FieldWriteability.FALSE, "Field  TimeZone is not writeable");
            preTimeZoneChange (newTimeZone);
            markFieldChange (FIELD_TimeZone);
            _TimeZone = newTimeZone;            
            postFieldChange (FIELD_TimeZone);
            postTimeZoneChange ();
        }
    }

    /**
     * Get the attribute State
     */
    public State getState ()
    {
        assertValid();
        State valToReturn = _State;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getState ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStateChange (State newState) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStateChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_State ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute State.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setState (State newState) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_State.compare (_State, newState);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newState = bhd.setState ((HiringTeam)this, newState);
                oldAndNewIdentical = HELPER_State.compare (_State, newState);
            }

            

            if (FIELD_State_Validators.length > 0)
            {
                Object newStateObj = HELPER_State.toObject (newState);

                if (newStateObj != null)
                {
                    int     loopMax = FIELD_State_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_State);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_State_Validators[v].checkAttribute (this, FIELD_State, metadata, newStateObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_State () != FieldWriteability.FALSE, "Field  State is not writeable");
            preStateChange (newState);
            markFieldChange (FIELD_State);
            _State = newState;            
            postFieldChange (FIELD_State);
            postStateChange ();
        }
    }

    /**
     * Get the attribute Country
     */
    public Countries getCountry ()
    {
        assertValid();
        Countries valToReturn = _Country;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCountry ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCountryChange (Countries newCountry) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCountryChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_Country ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute Country.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCountry (Countries newCountry) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_Country.compare (_Country, newCountry);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCountry = bhd.setCountry ((HiringTeam)this, newCountry);
                oldAndNewIdentical = HELPER_Country.compare (_Country, newCountry);
            }

            

            if (FIELD_Country_Validators.length > 0)
            {
                Object newCountryObj = HELPER_Country.toObject (newCountry);

                if (newCountryObj != null)
                {
                    int     loopMax = FIELD_Country_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_Country);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_Country_Validators[v].checkAttribute (this, FIELD_Country, metadata, newCountryObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_Country () != FieldWriteability.FALSE, "Field  Country is not writeable");
            preCountryChange (newCountry);
            markFieldChange (FIELD_Country);
            _Country = newCountry;            
            postFieldChange (FIELD_Country);
            postCountryChange ();
        }
    }

    /**
     * Get the attribute PostCode
     */
    public String getPostCode ()
    {
        assertValid();
        String valToReturn = _PostCode;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getPostCode ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void prePostCodeChange (String newPostCode) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postPostCodeChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_PostCode ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute PostCode.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setPostCode (String newPostCode) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_PostCode.compare (_PostCode, newPostCode);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newPostCode = bhd.setPostCode ((HiringTeam)this, newPostCode);
                oldAndNewIdentical = HELPER_PostCode.compare (_PostCode, newPostCode);
            }

            

            if (FIELD_PostCode_Validators.length > 0)
            {
                Object newPostCodeObj = HELPER_PostCode.toObject (newPostCode);

                if (newPostCodeObj != null)
                {
                    int     loopMax = FIELD_PostCode_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_PostCode);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_PostCode_Validators[v].checkAttribute (this, FIELD_PostCode, metadata, newPostCodeObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_PostCode () != FieldWriteability.FALSE, "Field  PostCode is not writeable");
            prePostCodeChange (newPostCode);
            markFieldChange (FIELD_PostCode);
            _PostCode = newPostCode;            
            postFieldChange (FIELD_PostCode);
            postPostCodeChange ();
        }
    }

    /**
     * Get the attribute City
     */
    public String getCity ()
    {
        assertValid();
        String valToReturn = _City;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCity ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCityChange (String newCity) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCityChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_City ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute City.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCity (String newCity) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_City.compare (_City, newCity);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCity = bhd.setCity ((HiringTeam)this, newCity);
                oldAndNewIdentical = HELPER_City.compare (_City, newCity);
            }

            

            if (FIELD_City_Validators.length > 0)
            {
                Object newCityObj = HELPER_City.toObject (newCity);

                if (newCityObj != null)
                {
                    int     loopMax = FIELD_City_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_City);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_City_Validators[v].checkAttribute (this, FIELD_City, metadata, newCityObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_City () != FieldWriteability.FALSE, "Field  City is not writeable");
            preCityChange (newCity);
            markFieldChange (FIELD_City);
            _City = newCity;            
            postFieldChange (FIELD_City);
            postCityChange ();
        }
    }

    /**
     * Get the attribute HasClientSupport
     */
    public Boolean getHasClientSupport ()
    {
        assertValid();
        Boolean valToReturn = _HasClientSupport;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getHasClientSupport ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preHasClientSupportChange (Boolean newHasClientSupport) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postHasClientSupportChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_HasClientSupport ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute HasClientSupport.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setHasClientSupport (Boolean newHasClientSupport) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_HasClientSupport.compare (_HasClientSupport, newHasClientSupport);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newHasClientSupport = bhd.setHasClientSupport ((HiringTeam)this, newHasClientSupport);
                oldAndNewIdentical = HELPER_HasClientSupport.compare (_HasClientSupport, newHasClientSupport);
            }

            

            if (FIELD_HasClientSupport_Validators.length > 0)
            {
                Object newHasClientSupportObj = HELPER_HasClientSupport.toObject (newHasClientSupport);

                if (newHasClientSupportObj != null)
                {
                    int     loopMax = FIELD_HasClientSupport_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_HasClientSupport);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_HasClientSupport_Validators[v].checkAttribute (this, FIELD_HasClientSupport, metadata, newHasClientSupportObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_HasClientSupport () != FieldWriteability.FALSE, "Field  HasClientSupport is not writeable");
            preHasClientSupportChange (newHasClientSupport);
            markFieldChange (FIELD_HasClientSupport);
            _HasClientSupport = newHasClientSupport;            
            postFieldChange (FIELD_HasClientSupport);
            postHasClientSupportChange ();
        }
    }

    /**
     * Get the attribute ManageOwnBilling
     */
    public Boolean getManageOwnBilling ()
    {
        assertValid();
        Boolean valToReturn = _ManageOwnBilling;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getManageOwnBilling ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preManageOwnBillingChange (Boolean newManageOwnBilling) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postManageOwnBillingChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_ManageOwnBilling ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute ManageOwnBilling.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setManageOwnBilling (Boolean newManageOwnBilling) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_ManageOwnBilling.compare (_ManageOwnBilling, newManageOwnBilling);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newManageOwnBilling = bhd.setManageOwnBilling ((HiringTeam)this, newManageOwnBilling);
                oldAndNewIdentical = HELPER_ManageOwnBilling.compare (_ManageOwnBilling, newManageOwnBilling);
            }

            

            if (FIELD_ManageOwnBilling_Validators.length > 0)
            {
                Object newManageOwnBillingObj = HELPER_ManageOwnBilling.toObject (newManageOwnBilling);

                if (newManageOwnBillingObj != null)
                {
                    int     loopMax = FIELD_ManageOwnBilling_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_ManageOwnBilling);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_ManageOwnBilling_Validators[v].checkAttribute (this, FIELD_ManageOwnBilling, metadata, newManageOwnBillingObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_ManageOwnBilling () != FieldWriteability.FALSE, "Field  ManageOwnBilling is not writeable");
            preManageOwnBillingChange (newManageOwnBilling);
            markFieldChange (FIELD_ManageOwnBilling);
            _ManageOwnBilling = newManageOwnBilling;            
            postFieldChange (FIELD_ManageOwnBilling);
            postManageOwnBillingChange ();
        }
    }

    /**
     * Get the attribute StripeReference
     */
    public String getStripeReference ()
    {
        assertValid();
        String valToReturn = _StripeReference;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeReference ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeReferenceChange (String newStripeReference) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeReferenceChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeReference ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeReference.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeReference (String newStripeReference) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeReference.compare (_StripeReference, newStripeReference);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeReference = bhd.setStripeReference ((HiringTeam)this, newStripeReference);
                oldAndNewIdentical = HELPER_StripeReference.compare (_StripeReference, newStripeReference);
            }

            

            if (FIELD_StripeReference_Validators.length > 0)
            {
                Object newStripeReferenceObj = HELPER_StripeReference.toObject (newStripeReference);

                if (newStripeReferenceObj != null)
                {
                    int     loopMax = FIELD_StripeReference_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeReference);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeReference_Validators[v].checkAttribute (this, FIELD_StripeReference, metadata, newStripeReferenceObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeReference () != FieldWriteability.FALSE, "Field  StripeReference is not writeable");
            preStripeReferenceChange (newStripeReference);
            markFieldChange (FIELD_StripeReference);
            _StripeReference = newStripeReference;            
            postFieldChange (FIELD_StripeReference);
            postStripeReferenceChange ();
        }
    }

    /**
     * Get the attribute StripeSubscription
     */
    public String getStripeSubscription ()
    {
        assertValid();
        String valToReturn = _StripeSubscription;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeSubscription ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeSubscriptionChange (String newStripeSubscription) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeSubscriptionChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeSubscription ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeSubscription.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeSubscription (String newStripeSubscription) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeSubscription.compare (_StripeSubscription, newStripeSubscription);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeSubscription = bhd.setStripeSubscription ((HiringTeam)this, newStripeSubscription);
                oldAndNewIdentical = HELPER_StripeSubscription.compare (_StripeSubscription, newStripeSubscription);
            }

            

            if (FIELD_StripeSubscription_Validators.length > 0)
            {
                Object newStripeSubscriptionObj = HELPER_StripeSubscription.toObject (newStripeSubscription);

                if (newStripeSubscriptionObj != null)
                {
                    int     loopMax = FIELD_StripeSubscription_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeSubscription);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeSubscription_Validators[v].checkAttribute (this, FIELD_StripeSubscription, metadata, newStripeSubscriptionObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeSubscription () != FieldWriteability.FALSE, "Field  StripeSubscription is not writeable");
            preStripeSubscriptionChange (newStripeSubscription);
            markFieldChange (FIELD_StripeSubscription);
            _StripeSubscription = newStripeSubscription;            
            postFieldChange (FIELD_StripeSubscription);
            postStripeSubscriptionChange ();
        }
    }

    /**
     * Get the attribute StripeFixedSubItem
     */
    public String getStripeFixedSubItem ()
    {
        assertValid();
        String valToReturn = _StripeFixedSubItem;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeFixedSubItem ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeFixedSubItemChange (String newStripeFixedSubItem) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeFixedSubItemChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeFixedSubItem ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeFixedSubItem.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeFixedSubItem (String newStripeFixedSubItem) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeFixedSubItem.compare (_StripeFixedSubItem, newStripeFixedSubItem);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeFixedSubItem = bhd.setStripeFixedSubItem ((HiringTeam)this, newStripeFixedSubItem);
                oldAndNewIdentical = HELPER_StripeFixedSubItem.compare (_StripeFixedSubItem, newStripeFixedSubItem);
            }

            

            if (FIELD_StripeFixedSubItem_Validators.length > 0)
            {
                Object newStripeFixedSubItemObj = HELPER_StripeFixedSubItem.toObject (newStripeFixedSubItem);

                if (newStripeFixedSubItemObj != null)
                {
                    int     loopMax = FIELD_StripeFixedSubItem_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeFixedSubItem);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeFixedSubItem_Validators[v].checkAttribute (this, FIELD_StripeFixedSubItem, metadata, newStripeFixedSubItemObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeFixedSubItem () != FieldWriteability.FALSE, "Field  StripeFixedSubItem is not writeable");
            preStripeFixedSubItemChange (newStripeFixedSubItem);
            markFieldChange (FIELD_StripeFixedSubItem);
            _StripeFixedSubItem = newStripeFixedSubItem;            
            postFieldChange (FIELD_StripeFixedSubItem);
            postStripeFixedSubItemChange ();
        }
    }

    /**
     * Get the attribute StripeMeteredSubItem
     */
    public String getStripeMeteredSubItem ()
    {
        assertValid();
        String valToReturn = _StripeMeteredSubItem;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeMeteredSubItem ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeMeteredSubItemChange (String newStripeMeteredSubItem) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeMeteredSubItemChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeMeteredSubItem ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeMeteredSubItem.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeMeteredSubItem (String newStripeMeteredSubItem) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeMeteredSubItem.compare (_StripeMeteredSubItem, newStripeMeteredSubItem);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeMeteredSubItem = bhd.setStripeMeteredSubItem ((HiringTeam)this, newStripeMeteredSubItem);
                oldAndNewIdentical = HELPER_StripeMeteredSubItem.compare (_StripeMeteredSubItem, newStripeMeteredSubItem);
            }

            

            if (FIELD_StripeMeteredSubItem_Validators.length > 0)
            {
                Object newStripeMeteredSubItemObj = HELPER_StripeMeteredSubItem.toObject (newStripeMeteredSubItem);

                if (newStripeMeteredSubItemObj != null)
                {
                    int     loopMax = FIELD_StripeMeteredSubItem_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeMeteredSubItem);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeMeteredSubItem_Validators[v].checkAttribute (this, FIELD_StripeMeteredSubItem, metadata, newStripeMeteredSubItemObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeMeteredSubItem () != FieldWriteability.FALSE, "Field  StripeMeteredSubItem is not writeable");
            preStripeMeteredSubItemChange (newStripeMeteredSubItem);
            markFieldChange (FIELD_StripeMeteredSubItem);
            _StripeMeteredSubItem = newStripeMeteredSubItem;            
            postFieldChange (FIELD_StripeMeteredSubItem);
            postStripeMeteredSubItemChange ();
        }
    }

    /**
     * Get the attribute NameOnCard
     */
    public String getNameOnCard ()
    {
        assertValid();
        String valToReturn = _NameOnCard;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getNameOnCard ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preNameOnCardChange (String newNameOnCard) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postNameOnCardChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_NameOnCard ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute NameOnCard.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setNameOnCard (String newNameOnCard) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_NameOnCard.compare (_NameOnCard, newNameOnCard);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newNameOnCard = bhd.setNameOnCard ((HiringTeam)this, newNameOnCard);
                oldAndNewIdentical = HELPER_NameOnCard.compare (_NameOnCard, newNameOnCard);
            }

            

            if (FIELD_NameOnCard_Validators.length > 0)
            {
                Object newNameOnCardObj = HELPER_NameOnCard.toObject (newNameOnCard);

                if (newNameOnCardObj != null)
                {
                    int     loopMax = FIELD_NameOnCard_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_NameOnCard);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_NameOnCard_Validators[v].checkAttribute (this, FIELD_NameOnCard, metadata, newNameOnCardObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_NameOnCard () != FieldWriteability.FALSE, "Field  NameOnCard is not writeable");
            preNameOnCardChange (newNameOnCard);
            markFieldChange (FIELD_NameOnCard);
            _NameOnCard = newNameOnCard;            
            postFieldChange (FIELD_NameOnCard);
            postNameOnCardChange ();
        }
    }

    /**
     * Get the attribute CardPostCode
     */
    public String getCardPostCode ()
    {
        assertValid();
        String valToReturn = _CardPostCode;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCardPostCode ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCardPostCodeChange (String newCardPostCode) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCardPostCodeChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_CardPostCode ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute CardPostCode.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCardPostCode (String newCardPostCode) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CardPostCode.compare (_CardPostCode, newCardPostCode);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCardPostCode = bhd.setCardPostCode ((HiringTeam)this, newCardPostCode);
                oldAndNewIdentical = HELPER_CardPostCode.compare (_CardPostCode, newCardPostCode);
            }

            

            if (FIELD_CardPostCode_Validators.length > 0)
            {
                Object newCardPostCodeObj = HELPER_CardPostCode.toObject (newCardPostCode);

                if (newCardPostCodeObj != null)
                {
                    int     loopMax = FIELD_CardPostCode_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_CardPostCode);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_CardPostCode_Validators[v].checkAttribute (this, FIELD_CardPostCode, metadata, newCardPostCodeObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CardPostCode () != FieldWriteability.FALSE, "Field  CardPostCode is not writeable");
            preCardPostCodeChange (newCardPostCode);
            markFieldChange (FIELD_CardPostCode);
            _CardPostCode = newCardPostCode;            
            postFieldChange (FIELD_CardPostCode);
            postCardPostCodeChange ();
        }
    }

    /**
     * Get the attribute CardID
     */
    public String getCardID ()
    {
        assertValid();
        String valToReturn = _CardID;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCardID ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCardIDChange (String newCardID) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCardIDChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_CardID ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute CardID.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCardID (String newCardID) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CardID.compare (_CardID, newCardID);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCardID = bhd.setCardID ((HiringTeam)this, newCardID);
                oldAndNewIdentical = HELPER_CardID.compare (_CardID, newCardID);
            }

            

            if (FIELD_CardID_Validators.length > 0)
            {
                Object newCardIDObj = HELPER_CardID.toObject (newCardID);

                if (newCardIDObj != null)
                {
                    int     loopMax = FIELD_CardID_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_CardID);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_CardID_Validators[v].checkAttribute (this, FIELD_CardID, metadata, newCardIDObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CardID () != FieldWriteability.FALSE, "Field  CardID is not writeable");
            preCardIDChange (newCardID);
            markFieldChange (FIELD_CardID);
            _CardID = newCardID;            
            postFieldChange (FIELD_CardID);
            postCardIDChange ();
        }
    }

    /**
     * Get the attribute PlanRenewedOn
     */
    public Date getPlanRenewedOn ()
    {
        assertValid();
        Date valToReturn = _PlanRenewedOn;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getPlanRenewedOn ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void prePlanRenewedOnChange (Date newPlanRenewedOn) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postPlanRenewedOnChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_PlanRenewedOn ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute PlanRenewedOn.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setPlanRenewedOn (Date newPlanRenewedOn) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_PlanRenewedOn.compare (_PlanRenewedOn, newPlanRenewedOn);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newPlanRenewedOn = bhd.setPlanRenewedOn ((HiringTeam)this, newPlanRenewedOn);
                oldAndNewIdentical = HELPER_PlanRenewedOn.compare (_PlanRenewedOn, newPlanRenewedOn);
            }

            

            if (FIELD_PlanRenewedOn_Validators.length > 0)
            {
                Object newPlanRenewedOnObj = HELPER_PlanRenewedOn.toObject (newPlanRenewedOn);

                if (newPlanRenewedOnObj != null)
                {
                    int     loopMax = FIELD_PlanRenewedOn_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_PlanRenewedOn);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_PlanRenewedOn_Validators[v].checkAttribute (this, FIELD_PlanRenewedOn, metadata, newPlanRenewedOnObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_PlanRenewedOn () != FieldWriteability.FALSE, "Field  PlanRenewedOn is not writeable");
            prePlanRenewedOnChange (newPlanRenewedOn);
            markFieldChange (FIELD_PlanRenewedOn);
            _PlanRenewedOn = newPlanRenewedOn;            
            postFieldChange (FIELD_PlanRenewedOn);
            postPlanRenewedOnChange ();
        }
    }

    /**
     * Get the attribute UsedCredits
     */
    public Integer getUsedCredits ()
    {
        assertValid();
        Integer valToReturn = _UsedCredits;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getUsedCredits ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preUsedCreditsChange (Integer newUsedCredits) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postUsedCreditsChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_UsedCredits ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute UsedCredits.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setUsedCredits (Integer newUsedCredits) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_UsedCredits.compare (_UsedCredits, newUsedCredits);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newUsedCredits = bhd.setUsedCredits ((HiringTeam)this, newUsedCredits);
                oldAndNewIdentical = HELPER_UsedCredits.compare (_UsedCredits, newUsedCredits);
            }

            

            if (FIELD_UsedCredits_Validators.length > 0)
            {
                Object newUsedCreditsObj = HELPER_UsedCredits.toObject (newUsedCredits);

                if (newUsedCreditsObj != null)
                {
                    int     loopMax = FIELD_UsedCredits_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_UsedCredits);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_UsedCredits_Validators[v].checkAttribute (this, FIELD_UsedCredits, metadata, newUsedCreditsObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_UsedCredits () != FieldWriteability.FALSE, "Field  UsedCredits is not writeable");
            preUsedCreditsChange (newUsedCredits);
            markFieldChange (FIELD_UsedCredits);
            _UsedCredits = newUsedCredits;            
            postFieldChange (FIELD_UsedCredits);
            postUsedCreditsChange ();
        }
    }

    /**
     * Get the attribute AvailableCredits
     */
    public Integer getAvailableCredits ()
    {
        assertValid();
        Integer valToReturn = _AvailableCredits;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getAvailableCredits ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preAvailableCreditsChange (Integer newAvailableCredits) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postAvailableCreditsChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_AvailableCredits ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute AvailableCredits.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setAvailableCredits (Integer newAvailableCredits) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_AvailableCredits.compare (_AvailableCredits, newAvailableCredits);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newAvailableCredits = bhd.setAvailableCredits ((HiringTeam)this, newAvailableCredits);
                oldAndNewIdentical = HELPER_AvailableCredits.compare (_AvailableCredits, newAvailableCredits);
            }

            

            if (FIELD_AvailableCredits_Validators.length > 0)
            {
                Object newAvailableCreditsObj = HELPER_AvailableCredits.toObject (newAvailableCredits);

                if (newAvailableCreditsObj != null)
                {
                    int     loopMax = FIELD_AvailableCredits_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_AvailableCredits);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_AvailableCredits_Validators[v].checkAttribute (this, FIELD_AvailableCredits, metadata, newAvailableCreditsObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_AvailableCredits () != FieldWriteability.FALSE, "Field  AvailableCredits is not writeable");
            preAvailableCreditsChange (newAvailableCredits);
            markFieldChange (FIELD_AvailableCredits);
            _AvailableCredits = newAvailableCredits;            
            postFieldChange (FIELD_AvailableCredits);
            postAvailableCreditsChange ();
        }
    }

    /**
     * Get the attribute IsPPJ
     */
    public Boolean getIsPPJ ()
    {
        assertValid();
        Boolean valToReturn = _IsPPJ;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getIsPPJ ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preIsPPJChange (Boolean newIsPPJ) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postIsPPJChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_IsPPJ ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute IsPPJ.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setIsPPJ (Boolean newIsPPJ) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_IsPPJ.compare (_IsPPJ, newIsPPJ);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newIsPPJ = bhd.setIsPPJ ((HiringTeam)this, newIsPPJ);
                oldAndNewIdentical = HELPER_IsPPJ.compare (_IsPPJ, newIsPPJ);
            }

            

            if (FIELD_IsPPJ_Validators.length > 0)
            {
                Object newIsPPJObj = HELPER_IsPPJ.toObject (newIsPPJ);

                if (newIsPPJObj != null)
                {
                    int     loopMax = FIELD_IsPPJ_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_IsPPJ);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_IsPPJ_Validators[v].checkAttribute (this, FIELD_IsPPJ, metadata, newIsPPJObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_IsPPJ () != FieldWriteability.FALSE, "Field  IsPPJ is not writeable");
            preIsPPJChange (newIsPPJ);
            markFieldChange (FIELD_IsPPJ);
            _IsPPJ = newIsPPJ;            
            postFieldChange (FIELD_IsPPJ);
            postIsPPJChange ();
        }
    }

    /**
     * Get the attribute HasCap
     */
    public Boolean getHasCap ()
    {
        assertValid();
        Boolean valToReturn = _HasCap;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getHasCap ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preHasCapChange (Boolean newHasCap) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postHasCapChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_HasCap ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute HasCap.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setHasCap (Boolean newHasCap) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_HasCap.compare (_HasCap, newHasCap);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newHasCap = bhd.setHasCap ((HiringTeam)this, newHasCap);
                oldAndNewIdentical = HELPER_HasCap.compare (_HasCap, newHasCap);
            }

            

            if (FIELD_HasCap_Validators.length > 0)
            {
                Object newHasCapObj = HELPER_HasCap.toObject (newHasCap);

                if (newHasCapObj != null)
                {
                    int     loopMax = FIELD_HasCap_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_HasCap);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_HasCap_Validators[v].checkAttribute (this, FIELD_HasCap, metadata, newHasCapObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_HasCap () != FieldWriteability.FALSE, "Field  HasCap is not writeable");
            preHasCapChange (newHasCap);
            markFieldChange (FIELD_HasCap);
            _HasCap = newHasCap;            
            postFieldChange (FIELD_HasCap);
            postHasCapChange ();
        }
    }

    /**
     * Get the attribute MaxCap
     */
    public Integer getMaxCap ()
    {
        assertValid();
        Integer valToReturn = _MaxCap;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getMaxCap ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preMaxCapChange (Integer newMaxCap) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postMaxCapChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_MaxCap ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute MaxCap.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setMaxCap (Integer newMaxCap) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_MaxCap.compare (_MaxCap, newMaxCap);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newMaxCap = bhd.setMaxCap ((HiringTeam)this, newMaxCap);
                oldAndNewIdentical = HELPER_MaxCap.compare (_MaxCap, newMaxCap);
            }

            

            if (FIELD_MaxCap_Validators.length > 0)
            {
                Object newMaxCapObj = HELPER_MaxCap.toObject (newMaxCap);

                if (newMaxCapObj != null)
                {
                    int     loopMax = FIELD_MaxCap_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_MaxCap);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_MaxCap_Validators[v].checkAttribute (this, FIELD_MaxCap, metadata, newMaxCapObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_MaxCap () != FieldWriteability.FALSE, "Field  MaxCap is not writeable");
            preMaxCapChange (newMaxCap);
            markFieldChange (FIELD_MaxCap);
            _MaxCap = newMaxCap;            
            postFieldChange (FIELD_MaxCap);
            postMaxCapChange ();
        }
    }

    /**
     * Get the attribute CouponExpiryDate
     */
    public Date getCouponExpiryDate ()
    {
        assertValid();
        Date valToReturn = _CouponExpiryDate;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCouponExpiryDate ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCouponExpiryDateChange (Date newCouponExpiryDate) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCouponExpiryDateChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_CouponExpiryDate ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute CouponExpiryDate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCouponExpiryDate (Date newCouponExpiryDate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CouponExpiryDate.compare (_CouponExpiryDate, newCouponExpiryDate);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCouponExpiryDate = bhd.setCouponExpiryDate ((HiringTeam)this, newCouponExpiryDate);
                oldAndNewIdentical = HELPER_CouponExpiryDate.compare (_CouponExpiryDate, newCouponExpiryDate);
            }

            

            if (FIELD_CouponExpiryDate_Validators.length > 0)
            {
                Object newCouponExpiryDateObj = HELPER_CouponExpiryDate.toObject (newCouponExpiryDate);

                if (newCouponExpiryDateObj != null)
                {
                    int     loopMax = FIELD_CouponExpiryDate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_CouponExpiryDate);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_CouponExpiryDate_Validators[v].checkAttribute (this, FIELD_CouponExpiryDate, metadata, newCouponExpiryDateObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CouponExpiryDate () != FieldWriteability.FALSE, "Field  CouponExpiryDate is not writeable");
            preCouponExpiryDateChange (newCouponExpiryDate);
            markFieldChange (FIELD_CouponExpiryDate);
            _CouponExpiryDate = newCouponExpiryDate;            
            postFieldChange (FIELD_CouponExpiryDate);
            postCouponExpiryDateChange ();
        }
    }

    /**
     * Get the attribute LastPlanAmount
     */
    public Double getLastPlanAmount ()
    {
        assertValid();
        Double valToReturn = _LastPlanAmount;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getLastPlanAmount ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preLastPlanAmountChange (Double newLastPlanAmount) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postLastPlanAmountChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_LastPlanAmount ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute LastPlanAmount.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setLastPlanAmount (Double newLastPlanAmount) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_LastPlanAmount.compare (_LastPlanAmount, newLastPlanAmount);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newLastPlanAmount = bhd.setLastPlanAmount ((HiringTeam)this, newLastPlanAmount);
                oldAndNewIdentical = HELPER_LastPlanAmount.compare (_LastPlanAmount, newLastPlanAmount);
            }

            

            if (FIELD_LastPlanAmount_Validators.length > 0)
            {
                Object newLastPlanAmountObj = HELPER_LastPlanAmount.toObject (newLastPlanAmount);

                if (newLastPlanAmountObj != null)
                {
                    int     loopMax = FIELD_LastPlanAmount_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_LastPlanAmount);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_LastPlanAmount_Validators[v].checkAttribute (this, FIELD_LastPlanAmount, metadata, newLastPlanAmountObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_LastPlanAmount () != FieldWriteability.FALSE, "Field  LastPlanAmount is not writeable");
            preLastPlanAmountChange (newLastPlanAmount);
            markFieldChange (FIELD_LastPlanAmount);
            _LastPlanAmount = newLastPlanAmount;            
            postFieldChange (FIELD_LastPlanAmount);
            postLastPlanAmountChange ();
        }
    }

    /**
     * Get the attribute IsLogoDeleted
     */
    public Boolean getIsLogoDeleted ()
    {
        assertValid();
        Boolean valToReturn = _IsLogoDeleted;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getIsLogoDeleted ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preIsLogoDeletedChange (Boolean newIsLogoDeleted) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postIsLogoDeletedChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_IsLogoDeleted ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute IsLogoDeleted.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setIsLogoDeleted (Boolean newIsLogoDeleted) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_IsLogoDeleted.compare (_IsLogoDeleted, newIsLogoDeleted);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newIsLogoDeleted = bhd.setIsLogoDeleted ((HiringTeam)this, newIsLogoDeleted);
                oldAndNewIdentical = HELPER_IsLogoDeleted.compare (_IsLogoDeleted, newIsLogoDeleted);
            }

            

            if (FIELD_IsLogoDeleted_Validators.length > 0)
            {
                Object newIsLogoDeletedObj = HELPER_IsLogoDeleted.toObject (newIsLogoDeleted);

                if (newIsLogoDeletedObj != null)
                {
                    int     loopMax = FIELD_IsLogoDeleted_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_IsLogoDeleted);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_IsLogoDeleted_Validators[v].checkAttribute (this, FIELD_IsLogoDeleted, metadata, newIsLogoDeletedObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_IsLogoDeleted () != FieldWriteability.FALSE, "Field  IsLogoDeleted is not writeable");
            preIsLogoDeletedChange (newIsLogoDeleted);
            markFieldChange (FIELD_IsLogoDeleted);
            _IsLogoDeleted = newIsLogoDeleted;            
            postFieldChange (FIELD_IsLogoDeleted);
            postIsLogoDeletedChange ();
        }
    }

    /**
     * Get the attribute CouponCode
     */
    public String getCouponCode ()
    {
        assertValid();
        String valToReturn = _CouponCode;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getCouponCode ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCouponCodeChange (String newCouponCode) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCouponCodeChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_CouponCode ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute CouponCode.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCouponCode (String newCouponCode) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CouponCode.compare (_CouponCode, newCouponCode);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newCouponCode = bhd.setCouponCode ((HiringTeam)this, newCouponCode);
                oldAndNewIdentical = HELPER_CouponCode.compare (_CouponCode, newCouponCode);
            }

            

            if (FIELD_CouponCode_Validators.length > 0)
            {
                Object newCouponCodeObj = HELPER_CouponCode.toObject (newCouponCode);

                if (newCouponCodeObj != null)
                {
                    int     loopMax = FIELD_CouponCode_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_CouponCode);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_CouponCode_Validators[v].checkAttribute (this, FIELD_CouponCode, metadata, newCouponCodeObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CouponCode () != FieldWriteability.FALSE, "Field  CouponCode is not writeable");
            preCouponCodeChange (newCouponCode);
            markFieldChange (FIELD_CouponCode);
            _CouponCode = newCouponCode;            
            postFieldChange (FIELD_CouponCode);
            postCouponCodeChange ();
        }
    }

    /**
     * Get the attribute StripeBrand
     */
    public String getStripeBrand ()
    {
        assertValid();
        String valToReturn = _StripeBrand;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeBrand ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeBrandChange (String newStripeBrand) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeBrandChange () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeBrand ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeBrand.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeBrand (String newStripeBrand) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeBrand.compare (_StripeBrand, newStripeBrand);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeBrand = bhd.setStripeBrand ((HiringTeam)this, newStripeBrand);
                oldAndNewIdentical = HELPER_StripeBrand.compare (_StripeBrand, newStripeBrand);
            }

            

            if (FIELD_StripeBrand_Validators.length > 0)
            {
                Object newStripeBrandObj = HELPER_StripeBrand.toObject (newStripeBrand);

                if (newStripeBrandObj != null)
                {
                    int     loopMax = FIELD_StripeBrand_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeBrand);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeBrand_Validators[v].checkAttribute (this, FIELD_StripeBrand, metadata, newStripeBrandObj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeBrand () != FieldWriteability.FALSE, "Field  StripeBrand is not writeable");
            preStripeBrandChange (newStripeBrand);
            markFieldChange (FIELD_StripeBrand);
            _StripeBrand = newStripeBrand;            
            postFieldChange (FIELD_StripeBrand);
            postStripeBrandChange ();
        }
    }

    /**
     * Get the attribute StripeLast4
     */
    public String getStripeLast4 ()
    {
        assertValid();
        String valToReturn = _StripeLast4;

            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                valToReturn = bhd.getStripeLast4 ((HiringTeam)this, valToReturn);
            }
            
            return valToReturn;
        
    }


    /**
     * Called prior to the attribute changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preStripeLast4Change (String newStripeLast4) throws FieldException
    {
    }


    /**
     * Called after the attribute changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postStripeLast4Change () throws FieldException
    {
    }

    
    public FieldWriteability getWriteability_StripeLast4 ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }

    /**
     * Set the attribute StripeLast4.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setStripeLast4 (String newStripeLast4) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_StripeLast4.compare (_StripeLast4, newStripeLast4);
        
        try
        {
            for (HiringTeamBehaviourDecorator bhd : HiringTeam_BehaviourDecorators)
            {
                newStripeLast4 = bhd.setStripeLast4 ((HiringTeam)this, newStripeLast4);
                oldAndNewIdentical = HELPER_StripeLast4.compare (_StripeLast4, newStripeLast4);
            }

            

            if (FIELD_StripeLast4_Validators.length > 0)
            {
                Object newStripeLast4Obj = HELPER_StripeLast4.toObject (newStripeLast4);

                if (newStripeLast4Obj != null)
                {
                    int     loopMax = FIELD_StripeLast4_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_HiringTeam.get (FIELD_StripeLast4);

                    for (int v = 0 ; v < loopMax ; ++v)
                    {
                        FIELD_StripeLast4_Validators[v].checkAttribute (this, FIELD_StripeLast4, metadata, newStripeLast4Obj);
                    }
                }
            }
        }
        catch (FieldException e)
        {
            if (!oldAndNewIdentical)
            {
                e.setWouldModify ();
            }
            
            throw e;
        }

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_StripeLast4 () != FieldWriteability.FALSE, "Field  StripeLast4 is not writeable");
            preStripeLast4Change (newStripeLast4);
            markFieldChange (FIELD_StripeLast4);
            _StripeLast4 = newStripeLast4;            
            postFieldChange (FIELD_StripeLast4);
            postStripeLast4Change ();
        }
    }



    /**
     * A list of multi assoc names e.g. list of strings.
     */
    public List<String> getSingleAssocs()
    {
        List result = super.getSingleAssocs ();

        
        result.add("Company");
        
        result.add("BilledByTeam");
        
        result.add("AddedByUser");
        
        result.add("PaymentPlan");
        
        result.add("Coupon");
        

        return result;
    }
    
    
    public BaseBusinessClass getSingleAssocReferenceInstance (String assocName)
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            return _Company.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return _BilledByTeam.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return _AddedByUser.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return _PaymentPlan.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            return _Coupon.getReferencedType ();
        }
        else
        {
            return super.getSingleAssocReferenceInstance (assocName);
        }
    }


    public String getSingleAssocBackReference(String assocName)
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            return Company.MULTIPLEREFERENCE_HiringTeams ;
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return HiringTeam.MULTIPLEREFERENCE_BillingTeams ;
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            return null ;
        }
        else
        {
            return super.getSingleAssocBackReference (assocName);
        }
    }
    
    
    public BaseBusinessClass getSingleAssoc (String assocName) throws StorageException
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            return getCompany ();
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return getBilledByTeam ();
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return getAddedByUser ();
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return getPaymentPlan ();
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            return getCoupon ();
        }
        else
        {
            return super.getSingleAssoc (assocName);
        }
    }


    public BaseBusinessClass getSingleAssoc (String assocName, Get getType) throws StorageException
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            return getCompany (getType);
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return getBilledByTeam (getType);
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return getAddedByUser (getType);
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return getPaymentPlan (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            return getCoupon (getType);
        }
        else
        {
            return super.getSingleAssoc (assocName, getType);
        }
    }


    public Long getSingleAssocID (String assocName) throws StorageException
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            return getCompanyID ();
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return getBilledByTeamID ();
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return getAddedByUserID ();
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return getPaymentPlanID ();
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            return getCouponID ();
        }
        else
        {
            return super.getSingleAssocID (assocName);
        }
    }


    public void setSingleAssoc (String assocName, BaseBusinessClass newValue) throws StorageException, FieldException
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Company))
        {
            setCompany ((Company)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            setBilledByTeam ((HiringTeam)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_AddedByUser))
        {
            setAddedByUser ((CompanyUser)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            setPaymentPlan ((PaymentPlan)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Coupon))
        {
            setCoupon ((StripeCoupon)(newValue));
        }
        else
        {
            super.setSingleAssoc (assocName, newValue);
        }
    }



    /**
     * Get the reference Company
     */
    public Company getCompany () throws StorageException
    {
        assertValid();
        
        try
        {
            return (Company)(_Company.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in HiringTeam:", this.getObjectID (), ", was trying to get Company:",  getCompanyID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _Company.get ().getClass ());
            throw e;
        }
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Company getCompany (Get getType) throws StorageException
    {
        assertValid();
        return _Company.get(getType);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCompanyID ()
    {
        assertValid();
        
        if (_Company == null)
        {
            return null;
        }
        else
        {
            return _Company.getID ();
        }
    }

    /**
     * Called prior to the assoc changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCompanyChange (Company newCompany) throws FieldException
    {
    }


    /**
     * Called after the assoc changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCompanyChange () throws FieldException
    {
    }



    
    public FieldWriteability getWriteability_Company ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    /**
     * Set the reference Company.  Checks to ensure a new value
     * has been supplied.  If so, marks the reference as altered and sets it.
     */
    public void setCompany (Company newCompany) throws StorageException, FieldException
    {
        BusinessObjectParser.assertFieldCondition (newCompany != null, this, SINGLEREFERENCE_Company, "mandatory");
        

        if (_Company.wouldReferencedChange (newCompany))
        {
            assertValid();
            Debug.assertion (getWriteability_Company () != FieldWriteability.FALSE, "Assoc Company is not writeable");
            preCompanyChange (newCompany);
            Company oldCompany = getCompany ();

                    if (oldCompany != null)
                    {
                        // This is to stop validation from triggering when we are removed
                        _Company.set (null);
                        oldCompany.removeFromHiringTeams ((HiringTeam)(this));
                    }

                    _Company.set (newCompany);

                    if (newCompany != null)
                    {
                        newCompany.addToHiringTeams ((HiringTeam)(this));
                    }
                
            postCompanyChange ();
        }
    }

    /**
     * Get the reference BilledByTeam
     */
    public HiringTeam getBilledByTeam () throws StorageException
    {
        assertValid();
        
        try
        {
            return (HiringTeam)(_BilledByTeam.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in HiringTeam:", this.getObjectID (), ", was trying to get HiringTeam:",  getBilledByTeamID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _BilledByTeam.get ().getClass ());
            throw e;
        }
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public HiringTeam getBilledByTeam (Get getType) throws StorageException
    {
        assertValid();
        return _BilledByTeam.get(getType);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getBilledByTeamID ()
    {
        assertValid();
        
        if (_BilledByTeam == null)
        {
            return null;
        }
        else
        {
            return _BilledByTeam.getID ();
        }
    }

    /**
     * Called prior to the assoc changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preBilledByTeamChange (HiringTeam newBilledByTeam) throws FieldException
    {
    }


    /**
     * Called after the assoc changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postBilledByTeamChange () throws FieldException
    {
    }



    
    public FieldWriteability getWriteability_BilledByTeam ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    /**
     * Set the reference BilledByTeam.  Checks to ensure a new value
     * has been supplied.  If so, marks the reference as altered and sets it.
     */
    public void setBilledByTeam (HiringTeam newBilledByTeam) throws StorageException, FieldException
    {
        

        if (_BilledByTeam.wouldReferencedChange (newBilledByTeam))
        {
            assertValid();
            Debug.assertion (getWriteability_BilledByTeam () != FieldWriteability.FALSE, "Assoc BilledByTeam is not writeable");
            preBilledByTeamChange (newBilledByTeam);
            HiringTeam oldBilledByTeam = getBilledByTeam ();

                    if (oldBilledByTeam != null)
                    {
                        // This is to stop validation from triggering when we are removed
                        _BilledByTeam.set (null);
                        oldBilledByTeam.removeFromBillingTeams ((HiringTeam)(this));
                    }

                    _BilledByTeam.set (newBilledByTeam);

                    if (newBilledByTeam != null)
                    {
                        newBilledByTeam.addToBillingTeams ((HiringTeam)(this));
                    }
                
            postBilledByTeamChange ();
        }
    }

    /**
     * Get the reference AddedByUser
     */
    public CompanyUser getAddedByUser () throws StorageException
    {
        assertValid();
        
        try
        {
            return (CompanyUser)(_AddedByUser.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in HiringTeam:", this.getObjectID (), ", was trying to get CompanyUser:",  getAddedByUserID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _AddedByUser.get ().getClass ());
            throw e;
        }
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public CompanyUser getAddedByUser (Get getType) throws StorageException
    {
        assertValid();
        return _AddedByUser.get(getType);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getAddedByUserID ()
    {
        assertValid();
        
        if (_AddedByUser == null)
        {
            return null;
        }
        else
        {
            return _AddedByUser.getID ();
        }
    }

    /**
     * Called prior to the assoc changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preAddedByUserChange (CompanyUser newAddedByUser) throws FieldException
    {
    }


    /**
     * Called after the assoc changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postAddedByUserChange () throws FieldException
    {
    }



    
    public FieldWriteability getWriteability_AddedByUser ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    /**
     * Set the reference AddedByUser.  Checks to ensure a new value
     * has been supplied.  If so, marks the reference as altered and sets it.
     */
    public void setAddedByUser (CompanyUser newAddedByUser) throws StorageException, FieldException
    {
        BusinessObjectParser.assertFieldCondition (newAddedByUser != null, this, SINGLEREFERENCE_AddedByUser, "mandatory");
        

        if (_AddedByUser.wouldReferencedChange (newAddedByUser))
        {
            assertValid();
            Debug.assertion (getWriteability_AddedByUser () != FieldWriteability.FALSE, "Assoc AddedByUser is not writeable");
            preAddedByUserChange (newAddedByUser);
            
                    _AddedByUser.set (newAddedByUser);
                
            postAddedByUserChange ();
        }
    }

    /**
     * Get the reference PaymentPlan
     */
    public PaymentPlan getPaymentPlan () throws StorageException
    {
        assertValid();
        
        try
        {
            return (PaymentPlan)(_PaymentPlan.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in HiringTeam:", this.getObjectID (), ", was trying to get PaymentPlan:",  getPaymentPlanID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _PaymentPlan.get ().getClass ());
            throw e;
        }
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public PaymentPlan getPaymentPlan (Get getType) throws StorageException
    {
        assertValid();
        return _PaymentPlan.get(getType);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getPaymentPlanID ()
    {
        assertValid();
        
        if (_PaymentPlan == null)
        {
            return null;
        }
        else
        {
            return _PaymentPlan.getID ();
        }
    }

    /**
     * Called prior to the assoc changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void prePaymentPlanChange (PaymentPlan newPaymentPlan) throws FieldException
    {
    }


    /**
     * Called after the assoc changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postPaymentPlanChange () throws FieldException
    {
    }



    
    public FieldWriteability getWriteability_PaymentPlan ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    /**
     * Set the reference PaymentPlan.  Checks to ensure a new value
     * has been supplied.  If so, marks the reference as altered and sets it.
     */
    public void setPaymentPlan (PaymentPlan newPaymentPlan) throws StorageException, FieldException
    {
        

        if (_PaymentPlan.wouldReferencedChange (newPaymentPlan))
        {
            assertValid();
            Debug.assertion (getWriteability_PaymentPlan () != FieldWriteability.FALSE, "Assoc PaymentPlan is not writeable");
            prePaymentPlanChange (newPaymentPlan);
            
                    _PaymentPlan.set (newPaymentPlan);
                
            postPaymentPlanChange ();
        }
    }

    /**
     * Get the reference Coupon
     */
    public StripeCoupon getCoupon () throws StorageException
    {
        assertValid();
        
        try
        {
            return (StripeCoupon)(_Coupon.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in HiringTeam:", this.getObjectID (), ", was trying to get StripeCoupon:",  getCouponID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _Coupon.get ().getClass ());
            throw e;
        }
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public StripeCoupon getCoupon (Get getType) throws StorageException
    {
        assertValid();
        return _Coupon.get(getType);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCouponID ()
    {
        assertValid();
        
        if (_Coupon == null)
        {
            return null;
        }
        else
        {
            return _Coupon.getID ();
        }
    }

    /**
     * Called prior to the assoc changing.  Subclasses need not call super.  If a field exception
     * is thrown, the attribute change will fail.  The new value is different to the old value.
     */
    protected void preCouponChange (StripeCoupon newCoupon) throws FieldException
    {
    }


    /**
     * Called after the assoc changes.
     * If a field exception is thrown, the value is still changed, however it 
     * may lead to the TX being rolled back
     */
    protected void postCouponChange () throws FieldException
    {
    }



    
    public FieldWriteability getWriteability_Coupon ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    /**
     * Set the reference Coupon.  Checks to ensure a new value
     * has been supplied.  If so, marks the reference as altered and sets it.
     */
    public void setCoupon (StripeCoupon newCoupon) throws StorageException, FieldException
    {
        

        if (_Coupon.wouldReferencedChange (newCoupon))
        {
            assertValid();
            Debug.assertion (getWriteability_Coupon () != FieldWriteability.FALSE, "Assoc Coupon is not writeable");
            preCouponChange (newCoupon);
            
                    _Coupon.set (newCoupon);
                
            postCouponChange ();
        }
    }

    /**
     * A list of multi assoc names e.g. list of strings.
     */
    public List<String> getMultiAssocs()
    {
        List result = super.getMultiAssocs ();

        
        result.add("Users");
        
        result.add("Clients");
        
        result.add("BillingTeams");
        

        return result;
    }


    /**
     * Get the reference instance for the multi assoc name.
     */
    public BaseBusinessClass getMultiAssocReferenceInstance(String attribName)
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            return CompanyUserHiringTeamLink.REFERENCE_CompanyUserHiringTeamLink ;
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            return Client.REFERENCE_Client ;
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            return HiringTeam.REFERENCE_HiringTeam ;
        }
        

        return super.getMultiAssocReferenceInstance(attribName);
    }


    public String getMultiAssocBackReference(String attribName)
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            return CompanyUserHiringTeamLink.SINGLEREFERENCE_HiringTeam ;
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            return Client.SINGLEREFERENCE_HiringTeam ;
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            return HiringTeam.SINGLEREFERENCE_BilledByTeam ;
        }
        

        return super.getMultiAssocBackReference(attribName);
    }


    /**
     * Get the assoc count for the multi assoc name.
     */
    public int getMultiAssocCount(String attribName) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            return this.getUsersCount();
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            return this.getClientsCount();
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            return this.getBillingTeamsCount();
        }
        

        return super.getMultiAssocCount(attribName);
    }


    /**
     * Get the assoc at a particular index
     */
    public BaseBusinessClass getMultiAssocAt(String attribName, int index) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            return this.getUsersAt(index);
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            return this.getClientsAt(index);
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            return this.getBillingTeamsAt(index);
        }
        

        return super.getMultiAssocAt(attribName, index);
    }


    /**
     * Add to a multi assoc by attribute name
     */
    public void addToMultiAssoc(String attribName, BaseBusinessClass newElement) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            addToUsers((CompanyUserHiringTeamLink)newElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            addToClients((Client)newElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            addToBillingTeams((HiringTeam)newElement);

            return;
        }
        

        super.addToMultiAssoc(attribName, newElement);
    }

    /**
     * Remove from a multi assoc by attribute name
     */
    public void removeFromMultiAssoc(String attribName, BaseBusinessClass oldElement) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            removeFromUsers((CompanyUserHiringTeamLink)oldElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            removeFromClients((Client)oldElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            removeFromBillingTeams((HiringTeam)oldElement);

            return;
        }
        

        super.removeFromMultiAssoc(attribName, oldElement);
    }


    protected void __loadMultiAssoc (String attribName, BaseBusinessClass[] elements)
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            _Users.__loadAssociation (elements);
            return;
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            _Clients.__loadAssociation (elements);
            return;
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            _BillingTeams.__loadAssociation (elements);
            return;
        }
        

        super.__loadMultiAssoc(attribName, elements);
    }


    protected boolean __isMultiAssocLoaded (String attribName)
    {
        
        if (MULTIPLEREFERENCE_Users.equals(attribName))
        {
            return _Users.isLoaded ();
        }
        
        if (MULTIPLEREFERENCE_Clients.equals(attribName))
        {
            return _Clients.isLoaded ();
        }
        
        if (MULTIPLEREFERENCE_BillingTeams.equals(attribName))
        {
            return _BillingTeams.isLoaded ();
        }
        

        return super.__isMultiAssocLoaded(attribName);
    }

    

    public FieldWriteability getWriteability_Users ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getUsersCount () throws StorageException
    {
        assertValid();
        return _Users.getReferencedObjectsCount ();
    }


    public void addToUsers (CompanyUserHiringTeamLink newElement) throws StorageException
    {
        if (_Users.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_Users () != FieldWriteability.FALSE, "MultiAssoc Users is not writeable (add)");
            _Users.appendElement (newElement);

            try
            {
                if (newElement.getHiringTeam () != this)
                {
                    newElement.setHiringTeam ((HiringTeam)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromUsers (CompanyUserHiringTeamLink elementToRemove) throws StorageException
    {
        if (_Users.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_Users () != FieldWriteability.FALSE, "MultiAssoc Users is not writeable (remove)");
            _Users.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getHiringTeam () != null)
                {
                    elementToRemove.setHiringTeam (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public CompanyUserHiringTeamLink getUsersAt (int index) throws StorageException
    {
        return (CompanyUserHiringTeamLink)(_Users.getElementAt (index));
    }


    public SortedSet<CompanyUserHiringTeamLink> getUsersSet () throws StorageException
    {
        return _Users.getSet ();
    }

    public FieldWriteability getWriteability_Clients ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getClientsCount () throws StorageException
    {
        assertValid();
        return _Clients.getReferencedObjectsCount ();
    }


    public void addToClients (Client newElement) throws StorageException
    {
        if (_Clients.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_Clients () != FieldWriteability.FALSE, "MultiAssoc Clients is not writeable (add)");
            _Clients.appendElement (newElement);

            try
            {
                if (newElement.getHiringTeam () != this)
                {
                    newElement.setHiringTeam ((HiringTeam)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromClients (Client elementToRemove) throws StorageException
    {
        if (_Clients.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_Clients () != FieldWriteability.FALSE, "MultiAssoc Clients is not writeable (remove)");
            _Clients.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getHiringTeam () != null)
                {
                    elementToRemove.setHiringTeam (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public Client getClientsAt (int index) throws StorageException
    {
        return (Client)(_Clients.getElementAt (index));
    }


    public SortedSet<Client> getClientsSet () throws StorageException
    {
        return _Clients.getSet ();
    }

    public FieldWriteability getWriteability_BillingTeams ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getBillingTeamsCount () throws StorageException
    {
        assertValid();
        return _BillingTeams.getReferencedObjectsCount ();
    }


    public void addToBillingTeams (HiringTeam newElement) throws StorageException
    {
        if (_BillingTeams.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_BillingTeams () != FieldWriteability.FALSE, "MultiAssoc BillingTeams is not writeable (add)");
            _BillingTeams.appendElement (newElement);

            try
            {
                if (newElement.getBilledByTeam () != this)
                {
                    newElement.setBilledByTeam ((HiringTeam)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromBillingTeams (HiringTeam elementToRemove) throws StorageException
    {
        if (_BillingTeams.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_BillingTeams () != FieldWriteability.FALSE, "MultiAssoc BillingTeams is not writeable (remove)");
            _BillingTeams.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getBilledByTeam () != null)
                {
                    elementToRemove.setBilledByTeam (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public HiringTeam getBillingTeamsAt (int index) throws StorageException
    {
        return (HiringTeam)(_BillingTeams.getElementAt (index));
    }


    public SortedSet<HiringTeam> getBillingTeamsSet () throws StorageException
    {
        return _BillingTeams.getSet ();
    }



    public void onDelete ()
    {
        try 
        {
            // Ensure we are removed from any loaded multi-associations that aren't mandatory
            if (_Company.isLoaded () || getTransaction ().isObjectLoaded (_Company.getReferencedType (), getCompanyID ()))
            {
                Company  referenced = getCompany ();

                if (referenced != null)
                {
                    // Stop the callback
                    LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null HiringTeams from ", getObjectID (), " to ", referenced.getObjectID ());
                    _Company.set (null);
                    referenced.removeFromHiringTeams ((HiringTeam)this);
                }
            }
        
            // Ensure we are removed from any loaded multi-associations that aren't mandatory
            if (_BilledByTeam.isLoaded () || getTransaction ().isObjectLoaded (_BilledByTeam.getReferencedType (), getBilledByTeamID ()))
            {
                HiringTeam  referenced = getBilledByTeam ();

                if (referenced != null)
                {
                    // Stop the callback
                    LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null BillingTeams from ", getObjectID (), " to ", referenced.getObjectID ());
                    _BilledByTeam.set (null);
                    referenced.removeFromBillingTeams ((HiringTeam)this);
                }
            }
        
            for(CompanyUserHiringTeamLink referenced : CollectionUtils.reverse(getUsersSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null HiringTeam from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setHiringTeam(null);
            }

            for(Client referenced : CollectionUtils.reverse(getClientsSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null HiringTeam from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setHiringTeam(null);
            }

            for(HiringTeam referenced : CollectionUtils.reverse(getBillingTeamsSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null BilledByTeam from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setBilledByTeam(null);
            }

        }
        catch (Exception e)
        {
            throw NestedException.wrap(e);
        }

        super.onDelete ();
    }


    public HiringTeam newInstance ()
    {
        return new HiringTeam ();
    }


    public HiringTeam referenceInstance ()
    {
        return REFERENCE_HiringTeam;
    }


    public HiringTeam getInTransaction (ObjectTransaction t) throws StorageException
    {
        return getHiringTeamByID (t, getObjectID());
    }
    
    
    public BaseBusinessClass dummyInstance ()
    {
        return DUMMY_HiringTeam;
    }


    public String getBaseSetName ()
    {
        return "tl_hiring_team";
    }





    /**
     * This is where an object returns the Persistent sets that will
     * store it into the database.
     * The should be entered into allSets
     */
    public void getPersistentSets (PersistentSetCollection allSets)
    {
        ObjectStatus        myStatus = getStatus ();
        PersistentSetStatus myPSetStatus = myStatus.getPSetStatus();
        ObjectID            myID = getID();

        super.getPersistentSets (allSets);

        
        PersistentSet   tl_hiring_teamPSet = allSets.getPersistentSet (myID, "tl_hiring_team", myPSetStatus);

        tl_hiring_teamPSet.setAttrib (FIELD_ObjectID, myID);
        tl_hiring_teamPSet.setAttrib (FIELD_HiringTeamName, HELPER_HiringTeamName.toObject (_HiringTeamName)); //
        tl_hiring_teamPSet.setAttrib (FIELD_HiringTeamLogo, HELPER_HiringTeamLogo.toObject (_HiringTeamLogo)); //
        tl_hiring_teamPSet.setAttrib (FIELD_HiringTeamType, HELPER_HiringTeamType.toObject (_HiringTeamType)); //
        tl_hiring_teamPSet.setAttrib (FIELD_Industry, HELPER_Industry.toObject (_Industry)); //
        tl_hiring_teamPSet.setAttrib (FIELD_TimeZone, HELPER_TimeZone.toObject (_TimeZone)); //
        tl_hiring_teamPSet.setAttrib (FIELD_State, HELPER_State.toObject (_State)); //
        tl_hiring_teamPSet.setAttrib (FIELD_Country, HELPER_Country.toObject (_Country)); //
        tl_hiring_teamPSet.setAttrib (FIELD_PostCode, HELPER_PostCode.toObject (_PostCode)); //
        tl_hiring_teamPSet.setAttrib (FIELD_City, HELPER_City.toObject (_City)); //
        tl_hiring_teamPSet.setAttrib (FIELD_HasClientSupport, HELPER_HasClientSupport.toObject (_HasClientSupport)); //
        tl_hiring_teamPSet.setAttrib (FIELD_ManageOwnBilling, HELPER_ManageOwnBilling.toObject (_ManageOwnBilling)); //
        tl_hiring_teamPSet.setAttrib (FIELD_StripeReference, HELPER_StripeReference.toObject (_StripeReference)); //
        tl_hiring_teamPSet.setAttrib (FIELD_StripeSubscription, HELPER_StripeSubscription.toObject (_StripeSubscription)); //
        tl_hiring_teamPSet.setAttrib (FIELD_StripeFixedSubItem, HELPER_StripeFixedSubItem.toObject (_StripeFixedSubItem)); //
        tl_hiring_teamPSet.setAttrib (FIELD_StripeMeteredSubItem, HELPER_StripeMeteredSubItem.toObject (_StripeMeteredSubItem)); //
        tl_hiring_teamPSet.setAttrib (FIELD_NameOnCard, HELPER_NameOnCard.toObject (_NameOnCard)); //
        tl_hiring_teamPSet.setAttrib (FIELD_CardPostCode, HELPER_CardPostCode.toObject (_CardPostCode)); //
        tl_hiring_teamPSet.setAttrib (FIELD_CardID, HELPER_CardID.toObject (_CardID)); //
        tl_hiring_teamPSet.setAttrib (FIELD_PlanRenewedOn, HELPER_PlanRenewedOn.toObject (_PlanRenewedOn)); //
        tl_hiring_teamPSet.setAttrib (FIELD_UsedCredits, HELPER_UsedCredits.toObject (_UsedCredits)); //
        tl_hiring_teamPSet.setAttrib (FIELD_AvailableCredits, HELPER_AvailableCredits.toObject (_AvailableCredits)); //
        tl_hiring_teamPSet.setAttrib (FIELD_IsPPJ, HELPER_IsPPJ.toObject (_IsPPJ)); //
        tl_hiring_teamPSet.setAttrib (FIELD_HasCap, HELPER_HasCap.toObject (_HasCap)); //
        tl_hiring_teamPSet.setAttrib (FIELD_MaxCap, HELPER_MaxCap.toObject (_MaxCap)); //
        tl_hiring_teamPSet.setAttrib (FIELD_CouponExpiryDate, HELPER_CouponExpiryDate.toObject (_CouponExpiryDate)); //
        tl_hiring_teamPSet.setAttrib (FIELD_LastPlanAmount, HELPER_LastPlanAmount.toObject (_LastPlanAmount)); //
        _Company.getPersistentSets (allSets);
        _BilledByTeam.getPersistentSets (allSets);
        _AddedByUser.getPersistentSets (allSets);
        _PaymentPlan.getPersistentSets (allSets);
        _Coupon.getPersistentSets (allSets);
        
    }


    /**
     * Sets the objects state based on Persistent sets.
     */
    public void setFromPersistentSets (ObjectID objectID, PersistentSetCollection allSets)
    {
        super.setFromPersistentSets (objectID, allSets);

        
        PersistentSet   tl_hiring_teamPSet = allSets.getPersistentSet (objectID, "tl_hiring_team");

        _HiringTeamName = (String)(HELPER_HiringTeamName.fromObject (_HiringTeamName, tl_hiring_teamPSet.getAttrib (FIELD_HiringTeamName))); //
        _HiringTeamLogo = (BinaryContent)(HELPER_HiringTeamLogo.fromObject (_HiringTeamLogo, tl_hiring_teamPSet.getAttrib (FIELD_HiringTeamLogo))); //
        _HiringTeamType = (HiringTeamType)(HELPER_HiringTeamType.fromObject (_HiringTeamType, tl_hiring_teamPSet.getAttrib (FIELD_HiringTeamType))); //
        _Industry = (Industry)(HELPER_Industry.fromObject (_Industry, tl_hiring_teamPSet.getAttrib (FIELD_Industry))); //
        _TimeZone = (TimeZone)(HELPER_TimeZone.fromObject (_TimeZone, tl_hiring_teamPSet.getAttrib (FIELD_TimeZone))); //
        _State = (State)(HELPER_State.fromObject (_State, tl_hiring_teamPSet.getAttrib (FIELD_State))); //
        _Country = (Countries)(HELPER_Country.fromObject (_Country, tl_hiring_teamPSet.getAttrib (FIELD_Country))); //
        _PostCode = (String)(HELPER_PostCode.fromObject (_PostCode, tl_hiring_teamPSet.getAttrib (FIELD_PostCode))); //
        _City = (String)(HELPER_City.fromObject (_City, tl_hiring_teamPSet.getAttrib (FIELD_City))); //
        _HasClientSupport = (Boolean)(HELPER_HasClientSupport.fromObject (_HasClientSupport, tl_hiring_teamPSet.getAttrib (FIELD_HasClientSupport))); //
        _ManageOwnBilling = (Boolean)(HELPER_ManageOwnBilling.fromObject (_ManageOwnBilling, tl_hiring_teamPSet.getAttrib (FIELD_ManageOwnBilling))); //
        _StripeReference = (String)(HELPER_StripeReference.fromObject (_StripeReference, tl_hiring_teamPSet.getAttrib (FIELD_StripeReference))); //
        _StripeSubscription = (String)(HELPER_StripeSubscription.fromObject (_StripeSubscription, tl_hiring_teamPSet.getAttrib (FIELD_StripeSubscription))); //
        _StripeFixedSubItem = (String)(HELPER_StripeFixedSubItem.fromObject (_StripeFixedSubItem, tl_hiring_teamPSet.getAttrib (FIELD_StripeFixedSubItem))); //
        _StripeMeteredSubItem = (String)(HELPER_StripeMeteredSubItem.fromObject (_StripeMeteredSubItem, tl_hiring_teamPSet.getAttrib (FIELD_StripeMeteredSubItem))); //
        _NameOnCard = (String)(HELPER_NameOnCard.fromObject (_NameOnCard, tl_hiring_teamPSet.getAttrib (FIELD_NameOnCard))); //
        _CardPostCode = (String)(HELPER_CardPostCode.fromObject (_CardPostCode, tl_hiring_teamPSet.getAttrib (FIELD_CardPostCode))); //
        _CardID = (String)(HELPER_CardID.fromObject (_CardID, tl_hiring_teamPSet.getAttrib (FIELD_CardID))); //
        _PlanRenewedOn = (Date)(HELPER_PlanRenewedOn.fromObject (_PlanRenewedOn, tl_hiring_teamPSet.getAttrib (FIELD_PlanRenewedOn))); //
        _UsedCredits = (Integer)(HELPER_UsedCredits.fromObject (_UsedCredits, tl_hiring_teamPSet.getAttrib (FIELD_UsedCredits))); //
        _AvailableCredits = (Integer)(HELPER_AvailableCredits.fromObject (_AvailableCredits, tl_hiring_teamPSet.getAttrib (FIELD_AvailableCredits))); //
        _IsPPJ = (Boolean)(HELPER_IsPPJ.fromObject (_IsPPJ, tl_hiring_teamPSet.getAttrib (FIELD_IsPPJ))); //
        _HasCap = (Boolean)(HELPER_HasCap.fromObject (_HasCap, tl_hiring_teamPSet.getAttrib (FIELD_HasCap))); //
        _MaxCap = (Integer)(HELPER_MaxCap.fromObject (_MaxCap, tl_hiring_teamPSet.getAttrib (FIELD_MaxCap))); //
        _CouponExpiryDate = (Date)(HELPER_CouponExpiryDate.fromObject (_CouponExpiryDate, tl_hiring_teamPSet.getAttrib (FIELD_CouponExpiryDate))); //
        _LastPlanAmount = (Double)(HELPER_LastPlanAmount.fromObject (_LastPlanAmount, tl_hiring_teamPSet.getAttrib (FIELD_LastPlanAmount))); //
        _Company.setFromPersistentSets (objectID, allSets);
        _BilledByTeam.setFromPersistentSets (objectID, allSets);
        _AddedByUser.setFromPersistentSets (objectID, allSets);
        _PaymentPlan.setFromPersistentSets (objectID, allSets);
        _Coupon.setFromPersistentSets (objectID, allSets);
        
    }





    public void setAttributesFrom (BaseBusinessClass other, MultiException e)
    {
        super.setAttributesFrom (other, e);

        if (other instanceof HiringTeam)
        {
            HiringTeam otherHiringTeam = (HiringTeam)other;
            
            try
            {
                setHiringTeamName (otherHiringTeam.getHiringTeamName ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setHiringTeamLogo (otherHiringTeam.getHiringTeamLogo ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setHiringTeamType (otherHiringTeam.getHiringTeamType ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIndustry (otherHiringTeam.getIndustry ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setTimeZone (otherHiringTeam.getTimeZone ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setState (otherHiringTeam.getState ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCountry (otherHiringTeam.getCountry ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setPostCode (otherHiringTeam.getPostCode ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCity (otherHiringTeam.getCity ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setHasClientSupport (otherHiringTeam.getHasClientSupport ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setManageOwnBilling (otherHiringTeam.getManageOwnBilling ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setStripeReference (otherHiringTeam.getStripeReference ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setStripeSubscription (otherHiringTeam.getStripeSubscription ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setStripeFixedSubItem (otherHiringTeam.getStripeFixedSubItem ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setStripeMeteredSubItem (otherHiringTeam.getStripeMeteredSubItem ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setNameOnCard (otherHiringTeam.getNameOnCard ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCardPostCode (otherHiringTeam.getCardPostCode ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCardID (otherHiringTeam.getCardID ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setPlanRenewedOn (otherHiringTeam.getPlanRenewedOn ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setUsedCredits (otherHiringTeam.getUsedCredits ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setAvailableCredits (otherHiringTeam.getAvailableCredits ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIsPPJ (otherHiringTeam.getIsPPJ ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setHasCap (otherHiringTeam.getHasCap ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setMaxCap (otherHiringTeam.getMaxCap ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCouponExpiryDate (otherHiringTeam.getCouponExpiryDate ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setLastPlanAmount (otherHiringTeam.getLastPlanAmount ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
        }
    }


    /**
     * Set the attributes in this to copies of the attributes in source.
     */
    public void copyAttributesFrom (BaseBusinessClass source)
    {
        super.copyAttributesFrom (source);

        if (source instanceof BaseHiringTeam)
        {
            BaseHiringTeam sourceHiringTeam = (BaseHiringTeam)(source);

            _HiringTeamName = sourceHiringTeam._HiringTeamName;
            _HiringTeamLogo = sourceHiringTeam._HiringTeamLogo;
            _HiringTeamType = sourceHiringTeam._HiringTeamType;
            _Industry = sourceHiringTeam._Industry;
            _TimeZone = sourceHiringTeam._TimeZone;
            _State = sourceHiringTeam._State;
            _Country = sourceHiringTeam._Country;
            _PostCode = sourceHiringTeam._PostCode;
            _City = sourceHiringTeam._City;
            _HasClientSupport = sourceHiringTeam._HasClientSupport;
            _ManageOwnBilling = sourceHiringTeam._ManageOwnBilling;
            _StripeReference = sourceHiringTeam._StripeReference;
            _StripeSubscription = sourceHiringTeam._StripeSubscription;
            _StripeFixedSubItem = sourceHiringTeam._StripeFixedSubItem;
            _StripeMeteredSubItem = sourceHiringTeam._StripeMeteredSubItem;
            _NameOnCard = sourceHiringTeam._NameOnCard;
            _CardPostCode = sourceHiringTeam._CardPostCode;
            _CardID = sourceHiringTeam._CardID;
            _PlanRenewedOn = sourceHiringTeam._PlanRenewedOn;
            _UsedCredits = sourceHiringTeam._UsedCredits;
            _AvailableCredits = sourceHiringTeam._AvailableCredits;
            _IsPPJ = sourceHiringTeam._IsPPJ;
            _HasCap = sourceHiringTeam._HasCap;
            _MaxCap = sourceHiringTeam._MaxCap;
            _CouponExpiryDate = sourceHiringTeam._CouponExpiryDate;
            _LastPlanAmount = sourceHiringTeam._LastPlanAmount;
            _IsLogoDeleted = sourceHiringTeam._IsLogoDeleted;
            _CouponCode = sourceHiringTeam._CouponCode;
            _StripeBrand = sourceHiringTeam._StripeBrand;
            _StripeLast4 = sourceHiringTeam._StripeLast4;
            
        }
    }


    /**
     * Set the associations in this to copies of the attributes in source.
     */
    public void copySingleAssociationsFrom (BaseBusinessClass source, boolean linkToGhosts)
    {
        super.copySingleAssociationsFrom (source, linkToGhosts);

        if (source instanceof BaseHiringTeam)
        {
            BaseHiringTeam sourceHiringTeam = (BaseHiringTeam)(source);

            _Company.copyFrom (sourceHiringTeam._Company, linkToGhosts);
            _BilledByTeam.copyFrom (sourceHiringTeam._BilledByTeam, linkToGhosts);
            _AddedByUser.copyFrom (sourceHiringTeam._AddedByUser, linkToGhosts);
            _PaymentPlan.copyFrom (sourceHiringTeam._PaymentPlan, linkToGhosts);
            _Coupon.copyFrom (sourceHiringTeam._Coupon, linkToGhosts);
            
        }
    }


    /**
     * Set the associations in this to copies of the attributes in source.
     */
    public void copyAssociationsFrom (BaseBusinessClass source, boolean linkToGhosts)
    {
        super.copyAssociationsFrom (source, linkToGhosts);

        if (source instanceof BaseHiringTeam)
        {
            BaseHiringTeam sourceHiringTeam = (BaseHiringTeam)(source);

            _Users.copyFrom (sourceHiringTeam._Users, linkToGhosts);
            _Clients.copyFrom (sourceHiringTeam._Clients, linkToGhosts);
            _BillingTeams.copyFrom (sourceHiringTeam._BillingTeams, linkToGhosts);
            
        }
    }


    public void validate (ValidationContext context)
    {
        super.validate (context);

        
        context.check (getCompanyID() != null, this, SINGLEREFERENCE_Company, "mandatory");
        
        context.check (getAddedByUserID() != null, this, SINGLEREFERENCE_AddedByUser, "mandatory");
        
    }


    /**
     * Subclasses must override this to read in their attributes
     */
    protected void readExternalData(Map<String, Object> vals) throws IOException, ClassNotFoundException
    {
        super.readExternalData(vals);

        _HiringTeamName = (String)(HELPER_HiringTeamName.readExternal (_HiringTeamName, vals.get(FIELD_HiringTeamName))); //
        _HiringTeamLogo = (BinaryContent)(HELPER_HiringTeamLogo.readExternal (_HiringTeamLogo, vals.get(FIELD_HiringTeamLogo))); //
        _HiringTeamType = (HiringTeamType)(HELPER_HiringTeamType.readExternal (_HiringTeamType, vals.get(FIELD_HiringTeamType))); //
        _Industry = (Industry)(HELPER_Industry.readExternal (_Industry, vals.get(FIELD_Industry))); //
        _TimeZone = (TimeZone)(HELPER_TimeZone.readExternal (_TimeZone, vals.get(FIELD_TimeZone))); //
        _State = (State)(HELPER_State.readExternal (_State, vals.get(FIELD_State))); //
        _Country = (Countries)(HELPER_Country.readExternal (_Country, vals.get(FIELD_Country))); //
        _PostCode = (String)(HELPER_PostCode.readExternal (_PostCode, vals.get(FIELD_PostCode))); //
        _City = (String)(HELPER_City.readExternal (_City, vals.get(FIELD_City))); //
        _HasClientSupport = (Boolean)(HELPER_HasClientSupport.readExternal (_HasClientSupport, vals.get(FIELD_HasClientSupport))); //
        _ManageOwnBilling = (Boolean)(HELPER_ManageOwnBilling.readExternal (_ManageOwnBilling, vals.get(FIELD_ManageOwnBilling))); //
        _StripeReference = (String)(HELPER_StripeReference.readExternal (_StripeReference, vals.get(FIELD_StripeReference))); //
        _StripeSubscription = (String)(HELPER_StripeSubscription.readExternal (_StripeSubscription, vals.get(FIELD_StripeSubscription))); //
        _StripeFixedSubItem = (String)(HELPER_StripeFixedSubItem.readExternal (_StripeFixedSubItem, vals.get(FIELD_StripeFixedSubItem))); //
        _StripeMeteredSubItem = (String)(HELPER_StripeMeteredSubItem.readExternal (_StripeMeteredSubItem, vals.get(FIELD_StripeMeteredSubItem))); //
        _NameOnCard = (String)(HELPER_NameOnCard.readExternal (_NameOnCard, vals.get(FIELD_NameOnCard))); //
        _CardPostCode = (String)(HELPER_CardPostCode.readExternal (_CardPostCode, vals.get(FIELD_CardPostCode))); //
        _CardID = (String)(HELPER_CardID.readExternal (_CardID, vals.get(FIELD_CardID))); //
        _PlanRenewedOn = (Date)(HELPER_PlanRenewedOn.readExternal (_PlanRenewedOn, vals.get(FIELD_PlanRenewedOn))); //
        _UsedCredits = (Integer)(HELPER_UsedCredits.readExternal (_UsedCredits, vals.get(FIELD_UsedCredits))); //
        _AvailableCredits = (Integer)(HELPER_AvailableCredits.readExternal (_AvailableCredits, vals.get(FIELD_AvailableCredits))); //
        _IsPPJ = (Boolean)(HELPER_IsPPJ.readExternal (_IsPPJ, vals.get(FIELD_IsPPJ))); //
        _HasCap = (Boolean)(HELPER_HasCap.readExternal (_HasCap, vals.get(FIELD_HasCap))); //
        _MaxCap = (Integer)(HELPER_MaxCap.readExternal (_MaxCap, vals.get(FIELD_MaxCap))); //
        _CouponExpiryDate = (Date)(HELPER_CouponExpiryDate.readExternal (_CouponExpiryDate, vals.get(FIELD_CouponExpiryDate))); //
        _LastPlanAmount = (Double)(HELPER_LastPlanAmount.readExternal (_LastPlanAmount, vals.get(FIELD_LastPlanAmount))); //
        _IsLogoDeleted = (Boolean)(HELPER_IsLogoDeleted.readExternal (_IsLogoDeleted, vals.get(FIELD_IsLogoDeleted))); //
        _CouponCode = (String)(HELPER_CouponCode.readExternal (_CouponCode, vals.get(FIELD_CouponCode))); //
        _StripeBrand = (String)(HELPER_StripeBrand.readExternal (_StripeBrand, vals.get(FIELD_StripeBrand))); //
        _StripeLast4 = (String)(HELPER_StripeLast4.readExternal (_StripeLast4, vals.get(FIELD_StripeLast4))); //
        _Company.readExternalData(vals.get(SINGLEREFERENCE_Company));
        _BilledByTeam.readExternalData(vals.get(SINGLEREFERENCE_BilledByTeam));
        _AddedByUser.readExternalData(vals.get(SINGLEREFERENCE_AddedByUser));
        _PaymentPlan.readExternalData(vals.get(SINGLEREFERENCE_PaymentPlan));
        _Coupon.readExternalData(vals.get(SINGLEREFERENCE_Coupon));
        _Users.readExternalData(vals.get(MULTIPLEREFERENCE_Users));
        _Clients.readExternalData(vals.get(MULTIPLEREFERENCE_Clients));
        _BillingTeams.readExternalData(vals.get(MULTIPLEREFERENCE_BillingTeams));
        
    }


    /**
     * Subclasses must override this to write out their attributes
     */
    protected void writeExternalData(Map<String, Object> vals) throws IOException
    {
        super.writeExternalData(vals);

        vals.put (FIELD_HiringTeamName, HELPER_HiringTeamName.writeExternal (_HiringTeamName));
        vals.put (FIELD_HiringTeamLogo, HELPER_HiringTeamLogo.writeExternal (_HiringTeamLogo));
        vals.put (FIELD_HiringTeamType, HELPER_HiringTeamType.writeExternal (_HiringTeamType));
        vals.put (FIELD_Industry, HELPER_Industry.writeExternal (_Industry));
        vals.put (FIELD_TimeZone, HELPER_TimeZone.writeExternal (_TimeZone));
        vals.put (FIELD_State, HELPER_State.writeExternal (_State));
        vals.put (FIELD_Country, HELPER_Country.writeExternal (_Country));
        vals.put (FIELD_PostCode, HELPER_PostCode.writeExternal (_PostCode));
        vals.put (FIELD_City, HELPER_City.writeExternal (_City));
        vals.put (FIELD_HasClientSupport, HELPER_HasClientSupport.writeExternal (_HasClientSupport));
        vals.put (FIELD_ManageOwnBilling, HELPER_ManageOwnBilling.writeExternal (_ManageOwnBilling));
        vals.put (FIELD_StripeReference, HELPER_StripeReference.writeExternal (_StripeReference));
        vals.put (FIELD_StripeSubscription, HELPER_StripeSubscription.writeExternal (_StripeSubscription));
        vals.put (FIELD_StripeFixedSubItem, HELPER_StripeFixedSubItem.writeExternal (_StripeFixedSubItem));
        vals.put (FIELD_StripeMeteredSubItem, HELPER_StripeMeteredSubItem.writeExternal (_StripeMeteredSubItem));
        vals.put (FIELD_NameOnCard, HELPER_NameOnCard.writeExternal (_NameOnCard));
        vals.put (FIELD_CardPostCode, HELPER_CardPostCode.writeExternal (_CardPostCode));
        vals.put (FIELD_CardID, HELPER_CardID.writeExternal (_CardID));
        vals.put (FIELD_PlanRenewedOn, HELPER_PlanRenewedOn.writeExternal (_PlanRenewedOn));
        vals.put (FIELD_UsedCredits, HELPER_UsedCredits.writeExternal (_UsedCredits));
        vals.put (FIELD_AvailableCredits, HELPER_AvailableCredits.writeExternal (_AvailableCredits));
        vals.put (FIELD_IsPPJ, HELPER_IsPPJ.writeExternal (_IsPPJ));
        vals.put (FIELD_HasCap, HELPER_HasCap.writeExternal (_HasCap));
        vals.put (FIELD_MaxCap, HELPER_MaxCap.writeExternal (_MaxCap));
        vals.put (FIELD_CouponExpiryDate, HELPER_CouponExpiryDate.writeExternal (_CouponExpiryDate));
        vals.put (FIELD_LastPlanAmount, HELPER_LastPlanAmount.writeExternal (_LastPlanAmount));
        vals.put (FIELD_IsLogoDeleted, HELPER_IsLogoDeleted.writeExternal (_IsLogoDeleted));
        vals.put (FIELD_CouponCode, HELPER_CouponCode.writeExternal (_CouponCode));
        vals.put (FIELD_StripeBrand, HELPER_StripeBrand.writeExternal (_StripeBrand));
        vals.put (FIELD_StripeLast4, HELPER_StripeLast4.writeExternal (_StripeLast4));
        vals.put (SINGLEREFERENCE_Company, _Company.writeExternalData());
        vals.put (SINGLEREFERENCE_BilledByTeam, _BilledByTeam.writeExternalData());
        vals.put (SINGLEREFERENCE_AddedByUser, _AddedByUser.writeExternalData());
        vals.put (SINGLEREFERENCE_PaymentPlan, _PaymentPlan.writeExternalData());
        vals.put (SINGLEREFERENCE_Coupon, _Coupon.writeExternalData());
        vals.put (MULTIPLEREFERENCE_Users, _Users.writeExternalData());
        vals.put (MULTIPLEREFERENCE_Clients, _Clients.writeExternalData());
        vals.put (MULTIPLEREFERENCE_BillingTeams, _BillingTeams.writeExternalData());
        
    }


    public void compare (BaseBusinessClass other, AttributeChangeListener listener) throws StorageException
    {
        super.compare (other, listener);

        if (other instanceof BaseHiringTeam)
        {
            BaseHiringTeam otherHiringTeam = (BaseHiringTeam)(other);

            
            if (!HELPER_HiringTeamName.compare(this._HiringTeamName, otherHiringTeam._HiringTeamName))
            {
                listener.notifyFieldChange(this, other, FIELD_HiringTeamName, HELPER_HiringTeamName.toObject(this._HiringTeamName), HELPER_HiringTeamName.toObject(otherHiringTeam._HiringTeamName));
            }
            if (!HELPER_HiringTeamLogo.compare(this._HiringTeamLogo, otherHiringTeam._HiringTeamLogo))
            {
                listener.notifyFieldChange(this, other, FIELD_HiringTeamLogo, HELPER_HiringTeamLogo.toObject(this._HiringTeamLogo), HELPER_HiringTeamLogo.toObject(otherHiringTeam._HiringTeamLogo));
            }
            if (!HELPER_HiringTeamType.compare(this._HiringTeamType, otherHiringTeam._HiringTeamType))
            {
                listener.notifyFieldChange(this, other, FIELD_HiringTeamType, HELPER_HiringTeamType.toObject(this._HiringTeamType), HELPER_HiringTeamType.toObject(otherHiringTeam._HiringTeamType));
            }
            if (!HELPER_Industry.compare(this._Industry, otherHiringTeam._Industry))
            {
                listener.notifyFieldChange(this, other, FIELD_Industry, HELPER_Industry.toObject(this._Industry), HELPER_Industry.toObject(otherHiringTeam._Industry));
            }
            if (!HELPER_TimeZone.compare(this._TimeZone, otherHiringTeam._TimeZone))
            {
                listener.notifyFieldChange(this, other, FIELD_TimeZone, HELPER_TimeZone.toObject(this._TimeZone), HELPER_TimeZone.toObject(otherHiringTeam._TimeZone));
            }
            if (!HELPER_State.compare(this._State, otherHiringTeam._State))
            {
                listener.notifyFieldChange(this, other, FIELD_State, HELPER_State.toObject(this._State), HELPER_State.toObject(otherHiringTeam._State));
            }
            if (!HELPER_Country.compare(this._Country, otherHiringTeam._Country))
            {
                listener.notifyFieldChange(this, other, FIELD_Country, HELPER_Country.toObject(this._Country), HELPER_Country.toObject(otherHiringTeam._Country));
            }
            if (!HELPER_PostCode.compare(this._PostCode, otherHiringTeam._PostCode))
            {
                listener.notifyFieldChange(this, other, FIELD_PostCode, HELPER_PostCode.toObject(this._PostCode), HELPER_PostCode.toObject(otherHiringTeam._PostCode));
            }
            if (!HELPER_City.compare(this._City, otherHiringTeam._City))
            {
                listener.notifyFieldChange(this, other, FIELD_City, HELPER_City.toObject(this._City), HELPER_City.toObject(otherHiringTeam._City));
            }
            if (!HELPER_HasClientSupport.compare(this._HasClientSupport, otherHiringTeam._HasClientSupport))
            {
                listener.notifyFieldChange(this, other, FIELD_HasClientSupport, HELPER_HasClientSupport.toObject(this._HasClientSupport), HELPER_HasClientSupport.toObject(otherHiringTeam._HasClientSupport));
            }
            if (!HELPER_ManageOwnBilling.compare(this._ManageOwnBilling, otherHiringTeam._ManageOwnBilling))
            {
                listener.notifyFieldChange(this, other, FIELD_ManageOwnBilling, HELPER_ManageOwnBilling.toObject(this._ManageOwnBilling), HELPER_ManageOwnBilling.toObject(otherHiringTeam._ManageOwnBilling));
            }
            if (!HELPER_StripeReference.compare(this._StripeReference, otherHiringTeam._StripeReference))
            {
                listener.notifyFieldChange(this, other, FIELD_StripeReference, HELPER_StripeReference.toObject(this._StripeReference), HELPER_StripeReference.toObject(otherHiringTeam._StripeReference));
            }
            if (!HELPER_StripeSubscription.compare(this._StripeSubscription, otherHiringTeam._StripeSubscription))
            {
                listener.notifyFieldChange(this, other, FIELD_StripeSubscription, HELPER_StripeSubscription.toObject(this._StripeSubscription), HELPER_StripeSubscription.toObject(otherHiringTeam._StripeSubscription));
            }
            if (!HELPER_StripeFixedSubItem.compare(this._StripeFixedSubItem, otherHiringTeam._StripeFixedSubItem))
            {
                listener.notifyFieldChange(this, other, FIELD_StripeFixedSubItem, HELPER_StripeFixedSubItem.toObject(this._StripeFixedSubItem), HELPER_StripeFixedSubItem.toObject(otherHiringTeam._StripeFixedSubItem));
            }
            if (!HELPER_StripeMeteredSubItem.compare(this._StripeMeteredSubItem, otherHiringTeam._StripeMeteredSubItem))
            {
                listener.notifyFieldChange(this, other, FIELD_StripeMeteredSubItem, HELPER_StripeMeteredSubItem.toObject(this._StripeMeteredSubItem), HELPER_StripeMeteredSubItem.toObject(otherHiringTeam._StripeMeteredSubItem));
            }
            if (!HELPER_NameOnCard.compare(this._NameOnCard, otherHiringTeam._NameOnCard))
            {
                listener.notifyFieldChange(this, other, FIELD_NameOnCard, HELPER_NameOnCard.toObject(this._NameOnCard), HELPER_NameOnCard.toObject(otherHiringTeam._NameOnCard));
            }
            if (!HELPER_CardPostCode.compare(this._CardPostCode, otherHiringTeam._CardPostCode))
            {
                listener.notifyFieldChange(this, other, FIELD_CardPostCode, HELPER_CardPostCode.toObject(this._CardPostCode), HELPER_CardPostCode.toObject(otherHiringTeam._CardPostCode));
            }
            if (!HELPER_CardID.compare(this._CardID, otherHiringTeam._CardID))
            {
                listener.notifyFieldChange(this, other, FIELD_CardID, HELPER_CardID.toObject(this._CardID), HELPER_CardID.toObject(otherHiringTeam._CardID));
            }
            if (!HELPER_PlanRenewedOn.compare(this._PlanRenewedOn, otherHiringTeam._PlanRenewedOn))
            {
                listener.notifyFieldChange(this, other, FIELD_PlanRenewedOn, HELPER_PlanRenewedOn.toObject(this._PlanRenewedOn), HELPER_PlanRenewedOn.toObject(otherHiringTeam._PlanRenewedOn));
            }
            if (!HELPER_UsedCredits.compare(this._UsedCredits, otherHiringTeam._UsedCredits))
            {
                listener.notifyFieldChange(this, other, FIELD_UsedCredits, HELPER_UsedCredits.toObject(this._UsedCredits), HELPER_UsedCredits.toObject(otherHiringTeam._UsedCredits));
            }
            if (!HELPER_AvailableCredits.compare(this._AvailableCredits, otherHiringTeam._AvailableCredits))
            {
                listener.notifyFieldChange(this, other, FIELD_AvailableCredits, HELPER_AvailableCredits.toObject(this._AvailableCredits), HELPER_AvailableCredits.toObject(otherHiringTeam._AvailableCredits));
            }
            if (!HELPER_IsPPJ.compare(this._IsPPJ, otherHiringTeam._IsPPJ))
            {
                listener.notifyFieldChange(this, other, FIELD_IsPPJ, HELPER_IsPPJ.toObject(this._IsPPJ), HELPER_IsPPJ.toObject(otherHiringTeam._IsPPJ));
            }
            if (!HELPER_HasCap.compare(this._HasCap, otherHiringTeam._HasCap))
            {
                listener.notifyFieldChange(this, other, FIELD_HasCap, HELPER_HasCap.toObject(this._HasCap), HELPER_HasCap.toObject(otherHiringTeam._HasCap));
            }
            if (!HELPER_MaxCap.compare(this._MaxCap, otherHiringTeam._MaxCap))
            {
                listener.notifyFieldChange(this, other, FIELD_MaxCap, HELPER_MaxCap.toObject(this._MaxCap), HELPER_MaxCap.toObject(otherHiringTeam._MaxCap));
            }
            if (!HELPER_CouponExpiryDate.compare(this._CouponExpiryDate, otherHiringTeam._CouponExpiryDate))
            {
                listener.notifyFieldChange(this, other, FIELD_CouponExpiryDate, HELPER_CouponExpiryDate.toObject(this._CouponExpiryDate), HELPER_CouponExpiryDate.toObject(otherHiringTeam._CouponExpiryDate));
            }
            if (!HELPER_LastPlanAmount.compare(this._LastPlanAmount, otherHiringTeam._LastPlanAmount))
            {
                listener.notifyFieldChange(this, other, FIELD_LastPlanAmount, HELPER_LastPlanAmount.toObject(this._LastPlanAmount), HELPER_LastPlanAmount.toObject(otherHiringTeam._LastPlanAmount));
            }

            // Compare single assocs
            _Company.compare (otherHiringTeam._Company, listener);
            _BilledByTeam.compare (otherHiringTeam._BilledByTeam, listener);
            _AddedByUser.compare (otherHiringTeam._AddedByUser, listener);
            _PaymentPlan.compare (otherHiringTeam._PaymentPlan, listener);
            _Coupon.compare (otherHiringTeam._Coupon, listener);
            

            // Compare multiple assocs
            _Users.compare (otherHiringTeam._Users, listener);
            _Clients.compare (otherHiringTeam._Clients, listener);
            _BillingTeams.compare (otherHiringTeam._BillingTeams, listener);
            
        }
    }


    public void visitTransients (AttributeVisitor visitor) throws StorageException
    {
        super.visitAttributes (visitor);

        visitor.visitField(this, FIELD_IsLogoDeleted, HELPER_IsLogoDeleted.toObject(getIsLogoDeleted()));
        visitor.visitField(this, FIELD_CouponCode, HELPER_CouponCode.toObject(getCouponCode()));
        visitor.visitField(this, FIELD_StripeBrand, HELPER_StripeBrand.toObject(getStripeBrand()));
        visitor.visitField(this, FIELD_StripeLast4, HELPER_StripeLast4.toObject(getStripeLast4()));
        
    }


    public void visitAttributes (AttributeVisitor visitor) throws StorageException
    {
        super.visitAttributes (visitor);

        visitor.visitField(this, FIELD_HiringTeamName, HELPER_HiringTeamName.toObject(getHiringTeamName()));
        visitor.visitField(this, FIELD_HiringTeamLogo, HELPER_HiringTeamLogo.toObject(getHiringTeamLogo()));
        visitor.visitField(this, FIELD_HiringTeamType, HELPER_HiringTeamType.toObject(getHiringTeamType()));
        visitor.visitField(this, FIELD_Industry, HELPER_Industry.toObject(getIndustry()));
        visitor.visitField(this, FIELD_TimeZone, HELPER_TimeZone.toObject(getTimeZone()));
        visitor.visitField(this, FIELD_State, HELPER_State.toObject(getState()));
        visitor.visitField(this, FIELD_Country, HELPER_Country.toObject(getCountry()));
        visitor.visitField(this, FIELD_PostCode, HELPER_PostCode.toObject(getPostCode()));
        visitor.visitField(this, FIELD_City, HELPER_City.toObject(getCity()));
        visitor.visitField(this, FIELD_HasClientSupport, HELPER_HasClientSupport.toObject(getHasClientSupport()));
        visitor.visitField(this, FIELD_ManageOwnBilling, HELPER_ManageOwnBilling.toObject(getManageOwnBilling()));
        visitor.visitField(this, FIELD_StripeReference, HELPER_StripeReference.toObject(getStripeReference()));
        visitor.visitField(this, FIELD_StripeSubscription, HELPER_StripeSubscription.toObject(getStripeSubscription()));
        visitor.visitField(this, FIELD_StripeFixedSubItem, HELPER_StripeFixedSubItem.toObject(getStripeFixedSubItem()));
        visitor.visitField(this, FIELD_StripeMeteredSubItem, HELPER_StripeMeteredSubItem.toObject(getStripeMeteredSubItem()));
        visitor.visitField(this, FIELD_NameOnCard, HELPER_NameOnCard.toObject(getNameOnCard()));
        visitor.visitField(this, FIELD_CardPostCode, HELPER_CardPostCode.toObject(getCardPostCode()));
        visitor.visitField(this, FIELD_CardID, HELPER_CardID.toObject(getCardID()));
        visitor.visitField(this, FIELD_PlanRenewedOn, HELPER_PlanRenewedOn.toObject(getPlanRenewedOn()));
        visitor.visitField(this, FIELD_UsedCredits, HELPER_UsedCredits.toObject(getUsedCredits()));
        visitor.visitField(this, FIELD_AvailableCredits, HELPER_AvailableCredits.toObject(getAvailableCredits()));
        visitor.visitField(this, FIELD_IsPPJ, HELPER_IsPPJ.toObject(getIsPPJ()));
        visitor.visitField(this, FIELD_HasCap, HELPER_HasCap.toObject(getHasCap()));
        visitor.visitField(this, FIELD_MaxCap, HELPER_MaxCap.toObject(getMaxCap()));
        visitor.visitField(this, FIELD_CouponExpiryDate, HELPER_CouponExpiryDate.toObject(getCouponExpiryDate()));
        visitor.visitField(this, FIELD_LastPlanAmount, HELPER_LastPlanAmount.toObject(getLastPlanAmount()));
        visitor.visitAssociation (_Company);
        visitor.visitAssociation (_BilledByTeam);
        visitor.visitAssociation (_AddedByUser);
        visitor.visitAssociation (_PaymentPlan);
        visitor.visitAssociation (_Coupon);
        visitor.visitAssociation (_Users);
        visitor.visitAssociation (_Clients);
        visitor.visitAssociation (_BillingTeams);
        
    }


    public void visitAssociations (AssociationVisitor visitor, AssociatedScope scope) throws StorageException
    {
        super.visitAssociations (visitor, scope);

        if (scope.includes (_Company))
        {
            visitor.visit (_Company);
        }
        if (scope.includes (_BilledByTeam))
        {
            visitor.visit (_BilledByTeam);
        }
        if (scope.includes (_AddedByUser))
        {
            visitor.visit (_AddedByUser);
        }
        if (scope.includes (_PaymentPlan))
        {
            visitor.visit (_PaymentPlan);
        }
        if (scope.includes (_Coupon))
        {
            visitor.visit (_Coupon);
        }
        if (scope.includes (_Users))
        {
            visitor.visit (_Users);
        }
        if (scope.includes (_Clients))
        {
            visitor.visit (_Clients);
        }
        if (scope.includes (_BillingTeams))
        {
            visitor.visit (_BillingTeams);
        }
        
    }


    public static HiringTeam createHiringTeam (ObjectTransaction transaction) throws StorageException
    {
        HiringTeam     result = new HiringTeam ();

        result.initialiseNewObject (transaction);

        return result;
    }


    public static HiringTeam getHiringTeamByID (ObjectTransaction transaction, Long objectID) throws StorageException
    {
        return (HiringTeam)(transaction.getObjectByID (REFERENCE_HiringTeam, objectID));
    }

    public boolean testFilter (String attribName, QueryFilter filter) throws StorageException
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_HiringTeamName))
        {
            return filter.matches (getHiringTeamName ());
        }
        else if (attribName.equals (FIELD_HiringTeamLogo))
        {
            return filter.matches (getHiringTeamLogo ());
        }
        else if (attribName.equals (FIELD_HiringTeamType))
        {
            return filter.matches (getHiringTeamType ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return filter.matches (getIndustry ());
        }
        else if (attribName.equals (FIELD_TimeZone))
        {
            return filter.matches (getTimeZone ());
        }
        else if (attribName.equals (FIELD_State))
        {
            return filter.matches (getState ());
        }
        else if (attribName.equals (FIELD_Country))
        {
            return filter.matches (getCountry ());
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return filter.matches (getPostCode ());
        }
        else if (attribName.equals (FIELD_City))
        {
            return filter.matches (getCity ());
        }
        else if (attribName.equals (FIELD_HasClientSupport))
        {
            return filter.matches (getHasClientSupport ());
        }
        else if (attribName.equals (FIELD_ManageOwnBilling))
        {
            return filter.matches (getManageOwnBilling ());
        }
        else if (attribName.equals (FIELD_StripeReference))
        {
            return filter.matches (getStripeReference ());
        }
        else if (attribName.equals (FIELD_StripeSubscription))
        {
            return filter.matches (getStripeSubscription ());
        }
        else if (attribName.equals (FIELD_StripeFixedSubItem))
        {
            return filter.matches (getStripeFixedSubItem ());
        }
        else if (attribName.equals (FIELD_StripeMeteredSubItem))
        {
            return filter.matches (getStripeMeteredSubItem ());
        }
        else if (attribName.equals (FIELD_NameOnCard))
        {
            return filter.matches (getNameOnCard ());
        }
        else if (attribName.equals (FIELD_CardPostCode))
        {
            return filter.matches (getCardPostCode ());
        }
        else if (attribName.equals (FIELD_CardID))
        {
            return filter.matches (getCardID ());
        }
        else if (attribName.equals (FIELD_PlanRenewedOn))
        {
            return filter.matches (getPlanRenewedOn ());
        }
        else if (attribName.equals (FIELD_UsedCredits))
        {
            return filter.matches (getUsedCredits ());
        }
        else if (attribName.equals (FIELD_AvailableCredits))
        {
            return filter.matches (getAvailableCredits ());
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return filter.matches (getIsPPJ ());
        }
        else if (attribName.equals (FIELD_HasCap))
        {
            return filter.matches (getHasCap ());
        }
        else if (attribName.equals (FIELD_MaxCap))
        {
            return filter.matches (getMaxCap ());
        }
        else if (attribName.equals (FIELD_CouponExpiryDate))
        {
            return filter.matches (getCouponExpiryDate ());
        }
        else if (attribName.equals (FIELD_LastPlanAmount))
        {
            return filter.matches (getLastPlanAmount ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Company))
        {
            return filter.matches (getCompany ());
        }
        else if (attribName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return filter.matches (getBilledByTeam ());
        }
        else if (attribName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return filter.matches (getAddedByUser ());
        }
        else if (attribName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return filter.matches (getPaymentPlan ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Coupon))
        {
            return filter.matches (getCoupon ());
        }
        else
        {
            return super.testFilter (attribName, filter);
        }
    }


    public static SearchAll SearchByAll () { return new SearchAll (); }

    public static class SearchAll extends SearchObject<HiringTeam>
    {
        
            public SearchAll andObjectID (QueryFilter<Long> filter)
            {
                filter.addFilter (context, "tl_hiring_team.object_id", FIELD_ObjectID);
                return this;
            }

            public SearchAll andObjectCreated (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_hiring_team.object_created_date", FIELD_ObjectCreated);
                return this;
            }

            public SearchAll andObjectLastModified (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_hiring_team.object_last_updated_date", FIELD_ObjectLastModified);
                return this;
            }

            
            public SearchAll andHiringTeamName (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.hiring_team_name", "HiringTeamName");
                return this;
            }
            
            public SearchAll andHiringTeamLogo (QueryFilter<BinaryContent> filter)
            {
                filter.addFilter (context, "tl_hiring_team.hiring_team_logo", "HiringTeamLogo");
                return this;
            }
            
            public SearchAll andHiringTeamType (QueryFilter<HiringTeamType> filter)
            {
                filter.addFilter (context, "tl_hiring_team.hiring_team_type", "HiringTeamType");
                return this;
            }
            
            public SearchAll andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_hiring_team.industry", "Industry");
                return this;
            }
            
            public SearchAll andTimeZone (QueryFilter<TimeZone> filter)
            {
                filter.addFilter (context, "tl_hiring_team.time_zone", "TimeZone");
                return this;
            }
            
            public SearchAll andState (QueryFilter<State> filter)
            {
                filter.addFilter (context, "tl_hiring_team.state", "State");
                return this;
            }
            
            public SearchAll andCountry (QueryFilter<Countries> filter)
            {
                filter.addFilter (context, "tl_hiring_team.country", "Country");
                return this;
            }
            
            public SearchAll andPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.post_code", "PostCode");
                return this;
            }
            
            public SearchAll andCity (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.city", "City");
                return this;
            }
            
            public SearchAll andHasClientSupport (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_hiring_team.has_client_support", "HasClientSupport");
                return this;
            }
            
            public SearchAll andManageOwnBilling (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_hiring_team.manage_own_billing", "ManageOwnBilling");
                return this;
            }
            
            public SearchAll andStripeReference (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.stripe_reference", "StripeReference");
                return this;
            }
            
            public SearchAll andStripeSubscription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.stripe_subscription", "StripeSubscription");
                return this;
            }
            
            public SearchAll andStripeFixedSubItem (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.stripe_fixed_sub_item", "StripeFixedSubItem");
                return this;
            }
            
            public SearchAll andStripeMeteredSubItem (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.stripe_metered_sub_item", "StripeMeteredSubItem");
                return this;
            }
            
            public SearchAll andNameOnCard (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.name_on_card", "NameOnCard");
                return this;
            }
            
            public SearchAll andCardPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.card_post_code", "CardPostCode");
                return this;
            }
            
            public SearchAll andCardID (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_hiring_team.card_id", "CardID");
                return this;
            }
            
            public SearchAll andPlanRenewedOn (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_hiring_team.plan_renewed_on", "PlanRenewedOn");
                return this;
            }
            
            public SearchAll andUsedCredits (QueryFilter<Integer> filter)
            {
                filter.addFilter (context, "tl_hiring_team.used_credits", "UsedCredits");
                return this;
            }
            
            public SearchAll andAvailableCredits (QueryFilter<Integer> filter)
            {
                filter.addFilter (context, "tl_hiring_team.available_credits", "AvailableCredits");
                return this;
            }
            
            public SearchAll andIsPPJ (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_hiring_team.is_ppj", "IsPPJ");
                return this;
            }
            
            public SearchAll andHasCap (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_hiring_team.has_cap", "HasCap");
                return this;
            }
            
            public SearchAll andMaxCap (QueryFilter<Integer> filter)
            {
                filter.addFilter (context, "tl_hiring_team.max_cap", "MaxCap");
                return this;
            }
            
            public SearchAll andCouponExpiryDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_hiring_team.coupon_expiry_date", "CouponExpiryDate");
                return this;
            }
            
            public SearchAll andLastPlanAmount (QueryFilter<Double> filter)
            {
                filter.addFilter (context, "tl_hiring_team.last_plan_amount", "LastPlanAmount");
                return this;
            }
            
            public SearchAll andCompany (QueryFilter<Company> filter)
            {
                filter.addFilter (context, "tl_hiring_team.company_id", "Company");
                return this;
            }
            
            public SearchAll andBilledByTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_hiring_team.billing_team_id", "BilledByTeam");
                return this;
            }
            
            public SearchAll andAddedByUser (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_hiring_team.added_by_user_id", "AddedByUser");
                return this;
            }
            
            public SearchAll andPaymentPlan (QueryFilter<PaymentPlan> filter)
            {
                filter.addFilter (context, "tl_hiring_team.payment_plan_id", "PaymentPlan");
                return this;
            }
            
            public SearchAll andCoupon (QueryFilter<StripeCoupon> filter)
            {
                filter.addFilter (context, "tl_hiring_team.coupon_id", "Coupon");
                return this;
            }
            
                public HiringTeam[]
             search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_HiringTeam, SEARCH_All, criteria);
            Set<HiringTeam>   typedResults = new LinkedHashSet <HiringTeam> ();
            for (BaseBusinessClass bbcResult : results)
            {
                HiringTeam aResult = (HiringTeam)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new HiringTeam[0]);
                            
        }
    }

        
                public static HiringTeam[]
             searchAll (ObjectTransaction transaction) throws StorageException
        {
            return SearchByAll ()
            .search (transaction);
        }



    public Object getAttribute (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_HiringTeamName))
        {
            return HELPER_HiringTeamName.toObject (getHiringTeamName ());
        }
        else if (attribName.equals (FIELD_HiringTeamLogo))
        {
            return HELPER_HiringTeamLogo.toObject (getHiringTeamLogo ());
        }
        else if (attribName.equals (FIELD_HiringTeamType))
        {
            return HELPER_HiringTeamType.toObject (getHiringTeamType ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry.toObject (getIndustry ());
        }
        else if (attribName.equals (FIELD_TimeZone))
        {
            return HELPER_TimeZone.toObject (getTimeZone ());
        }
        else if (attribName.equals (FIELD_State))
        {
            return HELPER_State.toObject (getState ());
        }
        else if (attribName.equals (FIELD_Country))
        {
            return HELPER_Country.toObject (getCountry ());
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return HELPER_PostCode.toObject (getPostCode ());
        }
        else if (attribName.equals (FIELD_City))
        {
            return HELPER_City.toObject (getCity ());
        }
        else if (attribName.equals (FIELD_HasClientSupport))
        {
            return HELPER_HasClientSupport.toObject (getHasClientSupport ());
        }
        else if (attribName.equals (FIELD_ManageOwnBilling))
        {
            return HELPER_ManageOwnBilling.toObject (getManageOwnBilling ());
        }
        else if (attribName.equals (FIELD_StripeReference))
        {
            return HELPER_StripeReference.toObject (getStripeReference ());
        }
        else if (attribName.equals (FIELD_StripeSubscription))
        {
            return HELPER_StripeSubscription.toObject (getStripeSubscription ());
        }
        else if (attribName.equals (FIELD_StripeFixedSubItem))
        {
            return HELPER_StripeFixedSubItem.toObject (getStripeFixedSubItem ());
        }
        else if (attribName.equals (FIELD_StripeMeteredSubItem))
        {
            return HELPER_StripeMeteredSubItem.toObject (getStripeMeteredSubItem ());
        }
        else if (attribName.equals (FIELD_NameOnCard))
        {
            return HELPER_NameOnCard.toObject (getNameOnCard ());
        }
        else if (attribName.equals (FIELD_CardPostCode))
        {
            return HELPER_CardPostCode.toObject (getCardPostCode ());
        }
        else if (attribName.equals (FIELD_CardID))
        {
            return HELPER_CardID.toObject (getCardID ());
        }
        else if (attribName.equals (FIELD_PlanRenewedOn))
        {
            return HELPER_PlanRenewedOn.toObject (getPlanRenewedOn ());
        }
        else if (attribName.equals (FIELD_UsedCredits))
        {
            return HELPER_UsedCredits.toObject (getUsedCredits ());
        }
        else if (attribName.equals (FIELD_AvailableCredits))
        {
            return HELPER_AvailableCredits.toObject (getAvailableCredits ());
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return HELPER_IsPPJ.toObject (getIsPPJ ());
        }
        else if (attribName.equals (FIELD_HasCap))
        {
            return HELPER_HasCap.toObject (getHasCap ());
        }
        else if (attribName.equals (FIELD_MaxCap))
        {
            return HELPER_MaxCap.toObject (getMaxCap ());
        }
        else if (attribName.equals (FIELD_CouponExpiryDate))
        {
            return HELPER_CouponExpiryDate.toObject (getCouponExpiryDate ());
        }
        else if (attribName.equals (FIELD_LastPlanAmount))
        {
            return HELPER_LastPlanAmount.toObject (getLastPlanAmount ());
        }
        else if (attribName.equals (FIELD_IsLogoDeleted))
        {
            return HELPER_IsLogoDeleted.toObject (getIsLogoDeleted ());
        }
        else if (attribName.equals (FIELD_CouponCode))
        {
            return HELPER_CouponCode.toObject (getCouponCode ());
        }
        else if (attribName.equals (FIELD_StripeBrand))
        {
            return HELPER_StripeBrand.toObject (getStripeBrand ());
        }
        else if (attribName.equals (FIELD_StripeLast4))
        {
            return HELPER_StripeLast4.toObject (getStripeLast4 ());
        }
        else
        {
            return super.getAttribute (attribName);
        }
    }


    public AttributeHelper getAttributeHelper (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_HiringTeamName))
        {
            return HELPER_HiringTeamName;
        }
        else if (attribName.equals (FIELD_HiringTeamLogo))
        {
            return HELPER_HiringTeamLogo;
        }
        else if (attribName.equals (FIELD_HiringTeamType))
        {
            return HELPER_HiringTeamType;
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry;
        }
        else if (attribName.equals (FIELD_TimeZone))
        {
            return HELPER_TimeZone;
        }
        else if (attribName.equals (FIELD_State))
        {
            return HELPER_State;
        }
        else if (attribName.equals (FIELD_Country))
        {
            return HELPER_Country;
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return HELPER_PostCode;
        }
        else if (attribName.equals (FIELD_City))
        {
            return HELPER_City;
        }
        else if (attribName.equals (FIELD_HasClientSupport))
        {
            return HELPER_HasClientSupport;
        }
        else if (attribName.equals (FIELD_ManageOwnBilling))
        {
            return HELPER_ManageOwnBilling;
        }
        else if (attribName.equals (FIELD_StripeReference))
        {
            return HELPER_StripeReference;
        }
        else if (attribName.equals (FIELD_StripeSubscription))
        {
            return HELPER_StripeSubscription;
        }
        else if (attribName.equals (FIELD_StripeFixedSubItem))
        {
            return HELPER_StripeFixedSubItem;
        }
        else if (attribName.equals (FIELD_StripeMeteredSubItem))
        {
            return HELPER_StripeMeteredSubItem;
        }
        else if (attribName.equals (FIELD_NameOnCard))
        {
            return HELPER_NameOnCard;
        }
        else if (attribName.equals (FIELD_CardPostCode))
        {
            return HELPER_CardPostCode;
        }
        else if (attribName.equals (FIELD_CardID))
        {
            return HELPER_CardID;
        }
        else if (attribName.equals (FIELD_PlanRenewedOn))
        {
            return HELPER_PlanRenewedOn;
        }
        else if (attribName.equals (FIELD_UsedCredits))
        {
            return HELPER_UsedCredits;
        }
        else if (attribName.equals (FIELD_AvailableCredits))
        {
            return HELPER_AvailableCredits;
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return HELPER_IsPPJ;
        }
        else if (attribName.equals (FIELD_HasCap))
        {
            return HELPER_HasCap;
        }
        else if (attribName.equals (FIELD_MaxCap))
        {
            return HELPER_MaxCap;
        }
        else if (attribName.equals (FIELD_CouponExpiryDate))
        {
            return HELPER_CouponExpiryDate;
        }
        else if (attribName.equals (FIELD_LastPlanAmount))
        {
            return HELPER_LastPlanAmount;
        }
        else if (attribName.equals (FIELD_IsLogoDeleted))
        {
            return HELPER_IsLogoDeleted;
        }
        else if (attribName.equals (FIELD_CouponCode))
        {
            return HELPER_CouponCode;
        }
        else if (attribName.equals (FIELD_StripeBrand))
        {
            return HELPER_StripeBrand;
        }
        else if (attribName.equals (FIELD_StripeLast4))
        {
            return HELPER_StripeLast4;
        }
        else
        {
            return super.getAttributeHelper (attribName);
        }
    }


    public void setAttribute (String attribName, Object attribValue) throws FieldException
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_HiringTeamName))
        {
            setHiringTeamName ((String)(HELPER_HiringTeamName.fromObject (_HiringTeamName, attribValue)));            
        }
        else if (attribName.equals (FIELD_HiringTeamLogo))
        {
            setHiringTeamLogo ((BinaryContent)(HELPER_HiringTeamLogo.fromObject (_HiringTeamLogo, attribValue)));            
        }
        else if (attribName.equals (FIELD_HiringTeamType))
        {
            setHiringTeamType ((HiringTeamType)(HELPER_HiringTeamType.fromObject (_HiringTeamType, attribValue)));            
        }
        else if (attribName.equals (FIELD_Industry))
        {
            setIndustry ((Industry)(HELPER_Industry.fromObject (_Industry, attribValue)));            
        }
        else if (attribName.equals (FIELD_TimeZone))
        {
            setTimeZone ((TimeZone)(HELPER_TimeZone.fromObject (_TimeZone, attribValue)));            
        }
        else if (attribName.equals (FIELD_State))
        {
            setState ((State)(HELPER_State.fromObject (_State, attribValue)));            
        }
        else if (attribName.equals (FIELD_Country))
        {
            setCountry ((Countries)(HELPER_Country.fromObject (_Country, attribValue)));            
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            setPostCode ((String)(HELPER_PostCode.fromObject (_PostCode, attribValue)));            
        }
        else if (attribName.equals (FIELD_City))
        {
            setCity ((String)(HELPER_City.fromObject (_City, attribValue)));            
        }
        else if (attribName.equals (FIELD_HasClientSupport))
        {
            setHasClientSupport ((Boolean)(HELPER_HasClientSupport.fromObject (_HasClientSupport, attribValue)));            
        }
        else if (attribName.equals (FIELD_ManageOwnBilling))
        {
            setManageOwnBilling ((Boolean)(HELPER_ManageOwnBilling.fromObject (_ManageOwnBilling, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeReference))
        {
            setStripeReference ((String)(HELPER_StripeReference.fromObject (_StripeReference, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeSubscription))
        {
            setStripeSubscription ((String)(HELPER_StripeSubscription.fromObject (_StripeSubscription, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeFixedSubItem))
        {
            setStripeFixedSubItem ((String)(HELPER_StripeFixedSubItem.fromObject (_StripeFixedSubItem, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeMeteredSubItem))
        {
            setStripeMeteredSubItem ((String)(HELPER_StripeMeteredSubItem.fromObject (_StripeMeteredSubItem, attribValue)));            
        }
        else if (attribName.equals (FIELD_NameOnCard))
        {
            setNameOnCard ((String)(HELPER_NameOnCard.fromObject (_NameOnCard, attribValue)));            
        }
        else if (attribName.equals (FIELD_CardPostCode))
        {
            setCardPostCode ((String)(HELPER_CardPostCode.fromObject (_CardPostCode, attribValue)));            
        }
        else if (attribName.equals (FIELD_CardID))
        {
            setCardID ((String)(HELPER_CardID.fromObject (_CardID, attribValue)));            
        }
        else if (attribName.equals (FIELD_PlanRenewedOn))
        {
            setPlanRenewedOn ((Date)(HELPER_PlanRenewedOn.fromObject (_PlanRenewedOn, attribValue)));            
        }
        else if (attribName.equals (FIELD_UsedCredits))
        {
            setUsedCredits ((Integer)(HELPER_UsedCredits.fromObject (_UsedCredits, attribValue)));            
        }
        else if (attribName.equals (FIELD_AvailableCredits))
        {
            setAvailableCredits ((Integer)(HELPER_AvailableCredits.fromObject (_AvailableCredits, attribValue)));            
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            setIsPPJ ((Boolean)(HELPER_IsPPJ.fromObject (_IsPPJ, attribValue)));            
        }
        else if (attribName.equals (FIELD_HasCap))
        {
            setHasCap ((Boolean)(HELPER_HasCap.fromObject (_HasCap, attribValue)));            
        }
        else if (attribName.equals (FIELD_MaxCap))
        {
            setMaxCap ((Integer)(HELPER_MaxCap.fromObject (_MaxCap, attribValue)));            
        }
        else if (attribName.equals (FIELD_CouponExpiryDate))
        {
            setCouponExpiryDate ((Date)(HELPER_CouponExpiryDate.fromObject (_CouponExpiryDate, attribValue)));            
        }
        else if (attribName.equals (FIELD_LastPlanAmount))
        {
            setLastPlanAmount ((Double)(HELPER_LastPlanAmount.fromObject (_LastPlanAmount, attribValue)));            
        }
        else if (attribName.equals (FIELD_IsLogoDeleted))
        {
            setIsLogoDeleted ((Boolean)(HELPER_IsLogoDeleted.fromObject (_IsLogoDeleted, attribValue)));            
        }
        else if (attribName.equals (FIELD_CouponCode))
        {
            setCouponCode ((String)(HELPER_CouponCode.fromObject (_CouponCode, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeBrand))
        {
            setStripeBrand ((String)(HELPER_StripeBrand.fromObject (_StripeBrand, attribValue)));            
        }
        else if (attribName.equals (FIELD_StripeLast4))
        {
            setStripeLast4 ((String)(HELPER_StripeLast4.fromObject (_StripeLast4, attribValue)));            
        }
        else
        {
            super.setAttribute (attribName, attribValue);
        }
    }



    public boolean isWriteable (String fieldName)
    {
        return getWriteable (fieldName) == FieldWriteability.TRUE;
    }


    public FieldWriteability getWriteable (String fieldName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (fieldName.equals (FIELD_HiringTeamName))
        {
            return getWriteability_HiringTeamName ();
        }
        else if (fieldName.equals (FIELD_HiringTeamLogo))
        {
            return getWriteability_HiringTeamLogo ();
        }
        else if (fieldName.equals (FIELD_HiringTeamType))
        {
            return getWriteability_HiringTeamType ();
        }
        else if (fieldName.equals (FIELD_Industry))
        {
            return getWriteability_Industry ();
        }
        else if (fieldName.equals (FIELD_TimeZone))
        {
            return getWriteability_TimeZone ();
        }
        else if (fieldName.equals (FIELD_State))
        {
            return getWriteability_State ();
        }
        else if (fieldName.equals (FIELD_Country))
        {
            return getWriteability_Country ();
        }
        else if (fieldName.equals (FIELD_PostCode))
        {
            return getWriteability_PostCode ();
        }
        else if (fieldName.equals (FIELD_City))
        {
            return getWriteability_City ();
        }
        else if (fieldName.equals (FIELD_HasClientSupport))
        {
            return getWriteability_HasClientSupport ();
        }
        else if (fieldName.equals (FIELD_ManageOwnBilling))
        {
            return getWriteability_ManageOwnBilling ();
        }
        else if (fieldName.equals (FIELD_StripeReference))
        {
            return getWriteability_StripeReference ();
        }
        else if (fieldName.equals (FIELD_StripeSubscription))
        {
            return getWriteability_StripeSubscription ();
        }
        else if (fieldName.equals (FIELD_StripeFixedSubItem))
        {
            return getWriteability_StripeFixedSubItem ();
        }
        else if (fieldName.equals (FIELD_StripeMeteredSubItem))
        {
            return getWriteability_StripeMeteredSubItem ();
        }
        else if (fieldName.equals (FIELD_NameOnCard))
        {
            return getWriteability_NameOnCard ();
        }
        else if (fieldName.equals (FIELD_CardPostCode))
        {
            return getWriteability_CardPostCode ();
        }
        else if (fieldName.equals (FIELD_CardID))
        {
            return getWriteability_CardID ();
        }
        else if (fieldName.equals (FIELD_PlanRenewedOn))
        {
            return getWriteability_PlanRenewedOn ();
        }
        else if (fieldName.equals (FIELD_UsedCredits))
        {
            return getWriteability_UsedCredits ();
        }
        else if (fieldName.equals (FIELD_AvailableCredits))
        {
            return getWriteability_AvailableCredits ();
        }
        else if (fieldName.equals (FIELD_IsPPJ))
        {
            return getWriteability_IsPPJ ();
        }
        else if (fieldName.equals (FIELD_HasCap))
        {
            return getWriteability_HasCap ();
        }
        else if (fieldName.equals (FIELD_MaxCap))
        {
            return getWriteability_MaxCap ();
        }
        else if (fieldName.equals (FIELD_CouponExpiryDate))
        {
            return getWriteability_CouponExpiryDate ();
        }
        else if (fieldName.equals (FIELD_LastPlanAmount))
        {
            return getWriteability_LastPlanAmount ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_Users))
        {
            return getWriteability_Users ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_Clients))
        {
            return getWriteability_Clients ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_BillingTeams))
        {
            return getWriteability_BillingTeams ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Company))
        {
            return getWriteability_Company ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_BilledByTeam))
        {
            return getWriteability_BilledByTeam ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_AddedByUser))
        {
            return getWriteability_AddedByUser ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_PaymentPlan))
        {
            return getWriteability_PaymentPlan ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Coupon))
        {
            return getWriteability_Coupon ();
        }
        else if (fieldName.equals (FIELD_IsLogoDeleted))
        {
            return getWriteability_IsLogoDeleted ();
        }
        else if (fieldName.equals (FIELD_CouponCode))
        {
            return getWriteability_CouponCode ();
        }
        else if (fieldName.equals (FIELD_StripeBrand))
        {
            return getWriteability_StripeBrand ();
        }
        else if (fieldName.equals (FIELD_StripeLast4))
        {
            return getWriteability_StripeLast4 ();
        }
        else
        {
            return super.getWriteable (fieldName);
        }
    }


    public void putUnwriteable (Set<String> fields)
    {
        
            if (getWriteability_HiringTeamName () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_HiringTeamName);
            }
        
            if (getWriteability_HiringTeamLogo () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_HiringTeamLogo);
            }
        
            if (getWriteability_HiringTeamType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_HiringTeamType);
            }
        
            if (getWriteability_Industry () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Industry);
            }
        
            if (getWriteability_TimeZone () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_TimeZone);
            }
        
            if (getWriteability_State () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_State);
            }
        
            if (getWriteability_Country () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Country);
            }
        
            if (getWriteability_PostCode () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_PostCode);
            }
        
            if (getWriteability_City () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_City);
            }
        
            if (getWriteability_HasClientSupport () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_HasClientSupport);
            }
        
            if (getWriteability_ManageOwnBilling () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ManageOwnBilling);
            }
        
            if (getWriteability_StripeReference () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeReference);
            }
        
            if (getWriteability_StripeSubscription () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeSubscription);
            }
        
            if (getWriteability_StripeFixedSubItem () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeFixedSubItem);
            }
        
            if (getWriteability_StripeMeteredSubItem () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeMeteredSubItem);
            }
        
            if (getWriteability_NameOnCard () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_NameOnCard);
            }
        
            if (getWriteability_CardPostCode () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CardPostCode);
            }
        
            if (getWriteability_CardID () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CardID);
            }
        
            if (getWriteability_PlanRenewedOn () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_PlanRenewedOn);
            }
        
            if (getWriteability_UsedCredits () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_UsedCredits);
            }
        
            if (getWriteability_AvailableCredits () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_AvailableCredits);
            }
        
            if (getWriteability_IsPPJ () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IsPPJ);
            }
        
            if (getWriteability_HasCap () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_HasCap);
            }
        
            if (getWriteability_MaxCap () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_MaxCap);
            }
        
            if (getWriteability_CouponExpiryDate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CouponExpiryDate);
            }
        
            if (getWriteability_LastPlanAmount () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_LastPlanAmount);
            }
        
            if (getWriteability_IsLogoDeleted () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IsLogoDeleted);
            }
        
            if (getWriteability_CouponCode () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CouponCode);
            }
        
            if (getWriteability_StripeBrand () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeBrand);
            }
        
            if (getWriteability_StripeLast4 () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_StripeLast4);
            }
        

        super.putUnwriteable (fields);
    }

    public List<AbstractAttribute> getAttributes ()
    {
        List result = super.getAttributes ();

        
        result.add(HELPER_HiringTeamName.getAttribObject (getClass (), _HiringTeamName, true, FIELD_HiringTeamName));
        result.add(HELPER_HiringTeamLogo.getAttribObject (getClass (), _HiringTeamLogo, false, FIELD_HiringTeamLogo));
        result.add(HELPER_HiringTeamType.getAttribObject (getClass (), _HiringTeamType, false, FIELD_HiringTeamType));
        result.add(HELPER_Industry.getAttribObject (getClass (), _Industry, false, FIELD_Industry));
        result.add(HELPER_TimeZone.getAttribObject (getClass (), _TimeZone, false, FIELD_TimeZone));
        result.add(HELPER_State.getAttribObject (getClass (), _State, false, FIELD_State));
        result.add(HELPER_Country.getAttribObject (getClass (), _Country, false, FIELD_Country));
        result.add(HELPER_PostCode.getAttribObject (getClass (), _PostCode, false, FIELD_PostCode));
        result.add(HELPER_City.getAttribObject (getClass (), _City, false, FIELD_City));
        result.add(HELPER_HasClientSupport.getAttribObject (getClass (), _HasClientSupport, false, FIELD_HasClientSupport));
        result.add(HELPER_ManageOwnBilling.getAttribObject (getClass (), _ManageOwnBilling, false, FIELD_ManageOwnBilling));
        result.add(HELPER_StripeReference.getAttribObject (getClass (), _StripeReference, false, FIELD_StripeReference));
        result.add(HELPER_StripeSubscription.getAttribObject (getClass (), _StripeSubscription, false, FIELD_StripeSubscription));
        result.add(HELPER_StripeFixedSubItem.getAttribObject (getClass (), _StripeFixedSubItem, false, FIELD_StripeFixedSubItem));
        result.add(HELPER_StripeMeteredSubItem.getAttribObject (getClass (), _StripeMeteredSubItem, false, FIELD_StripeMeteredSubItem));
        result.add(HELPER_NameOnCard.getAttribObject (getClass (), _NameOnCard, false, FIELD_NameOnCard));
        result.add(HELPER_CardPostCode.getAttribObject (getClass (), _CardPostCode, false, FIELD_CardPostCode));
        result.add(HELPER_CardID.getAttribObject (getClass (), _CardID, false, FIELD_CardID));
        result.add(HELPER_PlanRenewedOn.getAttribObject (getClass (), _PlanRenewedOn, false, FIELD_PlanRenewedOn));
        result.add(HELPER_UsedCredits.getAttribObject (getClass (), _UsedCredits, false, FIELD_UsedCredits));
        result.add(HELPER_AvailableCredits.getAttribObject (getClass (), _AvailableCredits, false, FIELD_AvailableCredits));
        result.add(HELPER_IsPPJ.getAttribObject (getClass (), _IsPPJ, false, FIELD_IsPPJ));
        result.add(HELPER_HasCap.getAttribObject (getClass (), _HasCap, false, FIELD_HasCap));
        result.add(HELPER_MaxCap.getAttribObject (getClass (), _MaxCap, false, FIELD_MaxCap));
        result.add(HELPER_CouponExpiryDate.getAttribObject (getClass (), _CouponExpiryDate, false, FIELD_CouponExpiryDate));
        result.add(HELPER_LastPlanAmount.getAttribObject (getClass (), _LastPlanAmount, false, FIELD_LastPlanAmount));
        result.add(HELPER_IsLogoDeleted.getAttribObject (getClass (), _IsLogoDeleted, false, FIELD_IsLogoDeleted));
        result.add(HELPER_CouponCode.getAttribObject (getClass (), _CouponCode, false, FIELD_CouponCode));
        result.add(HELPER_StripeBrand.getAttribObject (getClass (), _StripeBrand, false, FIELD_StripeBrand));
        result.add(HELPER_StripeLast4.getAttribObject (getClass (), _StripeLast4, false, FIELD_StripeLast4));

        return result;
    }


    public Map getAttributeMetadata (String attribute)
    {
        if (ATTRIBUTES_METADATA_HiringTeam.containsKey (attribute))
        {
            return (Map)ATTRIBUTES_METADATA_HiringTeam.get (attribute);
        }
        else
        {
            return super.getAttributeMetadata (attribute);
        }
    }


    public Object getAttributeMetadata (String attribute, String metadata)
    {
        if (ATTRIBUTES_METADATA_HiringTeam.containsKey (attribute))
        {
            return ((Map)ATTRIBUTES_METADATA_HiringTeam.get (attribute)).get(metadata);
        }
        else
        {
            return super.getAttributeMetadata (attribute, metadata);
        }
    }

    public void preCommit (boolean willBeStored) throws Exception
    {
        super.preCommit(willBeStored);
        
        if(willBeStored)
        {
        
          {  
            oneit.servlets.objstore.binary.BinaryContentHandler bchandler = oneit.servlets.objstore.binary.BinaryContentServlet.getHandler("loggedin");
              
            if(bchandler != null)
            {
                bchandler.preCommit(willBeStored, this, "HiringTeamLogo");
            }
            else
            {
                LogMgr.log(BUSINESS_OBJECTS, LogLevel.SYSTEMWARNING, "Unknown BinaryContentHandler loggedin on attribute HiringTeamLogo");
            }
          }
          
        }
    }

    public oneit.servlets.objstore.binary.BinaryContentHandler getBinaryContentHandler(String attribName)
    {
        
        if(CollectionUtils.equals(attribName, "HiringTeamLogo"))      
        {  
            return oneit.servlets.objstore.binary.BinaryContentServlet.getHandler("loggedin");
        }     
          
        
        return super.getBinaryContentHandler(attribName);
    }

    public static class HiringTeamBehaviourDecorator extends BaseBusinessClass.BBCBehaviourDecorator<HiringTeam>
    {

    /**
     * Get the attribute HiringTeamName
     */
    public String getHiringTeamName (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute HiringTeamName.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setHiringTeamName (HiringTeam obj, String newHiringTeamName) throws FieldException
    {
        return newHiringTeamName;
    }

    /**
     * Get the attribute HiringTeamLogo
     */
    public BinaryContent getHiringTeamLogo (HiringTeam obj, BinaryContent original)
    {
        return original;
    }

    /**
     * Change the value set for attribute HiringTeamLogo.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public BinaryContent setHiringTeamLogo (HiringTeam obj, BinaryContent newHiringTeamLogo) throws FieldException
    {
        return newHiringTeamLogo;
    }

    /**
     * Get the attribute HiringTeamType
     */
    public HiringTeamType getHiringTeamType (HiringTeam obj, HiringTeamType original)
    {
        return original;
    }

    /**
     * Change the value set for attribute HiringTeamType.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public HiringTeamType setHiringTeamType (HiringTeam obj, HiringTeamType newHiringTeamType) throws FieldException
    {
        return newHiringTeamType;
    }

    /**
     * Get the attribute Industry
     */
    public Industry getIndustry (HiringTeam obj, Industry original)
    {
        return original;
    }

    /**
     * Change the value set for attribute Industry.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Industry setIndustry (HiringTeam obj, Industry newIndustry) throws FieldException
    {
        return newIndustry;
    }

    /**
     * Get the attribute TimeZone
     */
    public TimeZone getTimeZone (HiringTeam obj, TimeZone original)
    {
        return original;
    }

    /**
     * Change the value set for attribute TimeZone.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public TimeZone setTimeZone (HiringTeam obj, TimeZone newTimeZone) throws FieldException
    {
        return newTimeZone;
    }

    /**
     * Get the attribute State
     */
    public State getState (HiringTeam obj, State original)
    {
        return original;
    }

    /**
     * Change the value set for attribute State.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public State setState (HiringTeam obj, State newState) throws FieldException
    {
        return newState;
    }

    /**
     * Get the attribute Country
     */
    public Countries getCountry (HiringTeam obj, Countries original)
    {
        return original;
    }

    /**
     * Change the value set for attribute Country.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Countries setCountry (HiringTeam obj, Countries newCountry) throws FieldException
    {
        return newCountry;
    }

    /**
     * Get the attribute PostCode
     */
    public String getPostCode (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute PostCode.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setPostCode (HiringTeam obj, String newPostCode) throws FieldException
    {
        return newPostCode;
    }

    /**
     * Get the attribute City
     */
    public String getCity (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute City.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCity (HiringTeam obj, String newCity) throws FieldException
    {
        return newCity;
    }

    /**
     * Get the attribute HasClientSupport
     */
    public Boolean getHasClientSupport (HiringTeam obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute HasClientSupport.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setHasClientSupport (HiringTeam obj, Boolean newHasClientSupport) throws FieldException
    {
        return newHasClientSupport;
    }

    /**
     * Get the attribute ManageOwnBilling
     */
    public Boolean getManageOwnBilling (HiringTeam obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute ManageOwnBilling.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setManageOwnBilling (HiringTeam obj, Boolean newManageOwnBilling) throws FieldException
    {
        return newManageOwnBilling;
    }

    /**
     * Get the attribute StripeReference
     */
    public String getStripeReference (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeReference.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeReference (HiringTeam obj, String newStripeReference) throws FieldException
    {
        return newStripeReference;
    }

    /**
     * Get the attribute StripeSubscription
     */
    public String getStripeSubscription (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeSubscription.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeSubscription (HiringTeam obj, String newStripeSubscription) throws FieldException
    {
        return newStripeSubscription;
    }

    /**
     * Get the attribute StripeFixedSubItem
     */
    public String getStripeFixedSubItem (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeFixedSubItem.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeFixedSubItem (HiringTeam obj, String newStripeFixedSubItem) throws FieldException
    {
        return newStripeFixedSubItem;
    }

    /**
     * Get the attribute StripeMeteredSubItem
     */
    public String getStripeMeteredSubItem (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeMeteredSubItem.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeMeteredSubItem (HiringTeam obj, String newStripeMeteredSubItem) throws FieldException
    {
        return newStripeMeteredSubItem;
    }

    /**
     * Get the attribute NameOnCard
     */
    public String getNameOnCard (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute NameOnCard.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setNameOnCard (HiringTeam obj, String newNameOnCard) throws FieldException
    {
        return newNameOnCard;
    }

    /**
     * Get the attribute CardPostCode
     */
    public String getCardPostCode (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CardPostCode.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCardPostCode (HiringTeam obj, String newCardPostCode) throws FieldException
    {
        return newCardPostCode;
    }

    /**
     * Get the attribute CardID
     */
    public String getCardID (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CardID.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCardID (HiringTeam obj, String newCardID) throws FieldException
    {
        return newCardID;
    }

    /**
     * Get the attribute PlanRenewedOn
     */
    public Date getPlanRenewedOn (HiringTeam obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute PlanRenewedOn.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setPlanRenewedOn (HiringTeam obj, Date newPlanRenewedOn) throws FieldException
    {
        return newPlanRenewedOn;
    }

    /**
     * Get the attribute UsedCredits
     */
    public Integer getUsedCredits (HiringTeam obj, Integer original)
    {
        return original;
    }

    /**
     * Change the value set for attribute UsedCredits.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Integer setUsedCredits (HiringTeam obj, Integer newUsedCredits) throws FieldException
    {
        return newUsedCredits;
    }

    /**
     * Get the attribute AvailableCredits
     */
    public Integer getAvailableCredits (HiringTeam obj, Integer original)
    {
        return original;
    }

    /**
     * Change the value set for attribute AvailableCredits.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Integer setAvailableCredits (HiringTeam obj, Integer newAvailableCredits) throws FieldException
    {
        return newAvailableCredits;
    }

    /**
     * Get the attribute IsPPJ
     */
    public Boolean getIsPPJ (HiringTeam obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute IsPPJ.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setIsPPJ (HiringTeam obj, Boolean newIsPPJ) throws FieldException
    {
        return newIsPPJ;
    }

    /**
     * Get the attribute HasCap
     */
    public Boolean getHasCap (HiringTeam obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute HasCap.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setHasCap (HiringTeam obj, Boolean newHasCap) throws FieldException
    {
        return newHasCap;
    }

    /**
     * Get the attribute MaxCap
     */
    public Integer getMaxCap (HiringTeam obj, Integer original)
    {
        return original;
    }

    /**
     * Change the value set for attribute MaxCap.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Integer setMaxCap (HiringTeam obj, Integer newMaxCap) throws FieldException
    {
        return newMaxCap;
    }

    /**
     * Get the attribute CouponExpiryDate
     */
    public Date getCouponExpiryDate (HiringTeam obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CouponExpiryDate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setCouponExpiryDate (HiringTeam obj, Date newCouponExpiryDate) throws FieldException
    {
        return newCouponExpiryDate;
    }

    /**
     * Get the attribute LastPlanAmount
     */
    public Double getLastPlanAmount (HiringTeam obj, Double original)
    {
        return original;
    }

    /**
     * Change the value set for attribute LastPlanAmount.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Double setLastPlanAmount (HiringTeam obj, Double newLastPlanAmount) throws FieldException
    {
        return newLastPlanAmount;
    }

    /**
     * Get the attribute IsLogoDeleted
     */
    public Boolean getIsLogoDeleted (HiringTeam obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute IsLogoDeleted.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setIsLogoDeleted (HiringTeam obj, Boolean newIsLogoDeleted) throws FieldException
    {
        return newIsLogoDeleted;
    }

    /**
     * Get the attribute CouponCode
     */
    public String getCouponCode (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CouponCode.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCouponCode (HiringTeam obj, String newCouponCode) throws FieldException
    {
        return newCouponCode;
    }

    /**
     * Get the attribute StripeBrand
     */
    public String getStripeBrand (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeBrand.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeBrand (HiringTeam obj, String newStripeBrand) throws FieldException
    {
        return newStripeBrand;
    }

    /**
     * Get the attribute StripeLast4
     */
    public String getStripeLast4 (HiringTeam obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute StripeLast4.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setStripeLast4 (HiringTeam obj, String newStripeLast4) throws FieldException
    {
        return newStripeLast4;
    }

    }

    
    public ORMPipeLine pipes()
    {
        return new HiringTeamPipeLineFactory<HiringTeam, HiringTeam> ((HiringTeam)this);
    }
      
    /**
     * Use this instead of pipes() to get rid of type casting.
     */  
    public HiringTeamPipeLineFactory<HiringTeam, HiringTeam> pipelineHiringTeam()
    {
        return (HiringTeamPipeLineFactory<HiringTeam, HiringTeam>) pipes();
    }
    
    public static HiringTeamPipeLineFactory<HiringTeam, HiringTeam> pipesHiringTeam(Collection<HiringTeam> items)
    {
        return REFERENCE_HiringTeam.new HiringTeamPipeLineFactory<HiringTeam, HiringTeam> (items);
    }
    
    public static HiringTeamPipeLineFactory<HiringTeam, HiringTeam> pipesHiringTeam(HiringTeam[] _items)
    {
        return pipesHiringTeam(Arrays.asList (_items));
    }
    
    public static HiringTeamPipeLineFactory<HiringTeam, HiringTeam> pipesHiringTeam()
    {
        return pipesHiringTeam((Collection)null);
    }
    
    
    public class HiringTeamPipeLineFactory<From extends BaseBusinessClass, Me extends HiringTeam> extends BaseBusinessClass.ORMPipeLine<From, Me>    
    {
        public <Prev> HiringTeamPipeLineFactory (PipeLine<From, Prev> pipeLine, Pipe<Prev, Me> nextPipe)
        {
            super (pipeLine, nextPipe);
        }
        
        public HiringTeamPipeLineFactory (From seed)
        {
            super(seed);
        }

        public HiringTeamPipeLineFactory (Collection<From> seed)
        {
            super(seed);
        }
        
        
        public PipeLine<From, ? extends Object> to(String name)
        {
            if (name.equals ("Users"))
            {
                return toUsers ();
            }                
            if (name.equals ("Clients"))
            {
                return toClients ();
            }                
            if (name.equals ("BillingTeams"))
            {
                return toBillingTeams ();
            }                
            if (name.equals ("IsLogoDeleted"))
            {
                return toIsLogoDeleted ();
            }                
            if (name.equals ("CouponCode"))
            {
                return toCouponCode ();
            }                
            if (name.equals ("StripeBrand"))
            {
                return toStripeBrand ();
            }                
            if (name.equals ("StripeLast4"))
            {
                return toStripeLast4 ();
            }                
            if (name.equals ("HiringTeamName"))
            {
                return toHiringTeamName ();
            }                
            if (name.equals ("HiringTeamLogo"))
            {
                return toHiringTeamLogo ();
            }                
            if (name.equals ("HiringTeamType"))
            {
                return toHiringTeamType ();
            }                
            if (name.equals ("Industry"))
            {
                return toIndustry ();
            }                
            if (name.equals ("TimeZone"))
            {
                return toTimeZone ();
            }                
            if (name.equals ("State"))
            {
                return toState ();
            }                
            if (name.equals ("Country"))
            {
                return toCountry ();
            }                
            if (name.equals ("PostCode"))
            {
                return toPostCode ();
            }                
            if (name.equals ("City"))
            {
                return toCity ();
            }                
            if (name.equals ("HasClientSupport"))
            {
                return toHasClientSupport ();
            }                
            if (name.equals ("ManageOwnBilling"))
            {
                return toManageOwnBilling ();
            }                
            if (name.equals ("StripeReference"))
            {
                return toStripeReference ();
            }                
            if (name.equals ("StripeSubscription"))
            {
                return toStripeSubscription ();
            }                
            if (name.equals ("StripeFixedSubItem"))
            {
                return toStripeFixedSubItem ();
            }                
            if (name.equals ("StripeMeteredSubItem"))
            {
                return toStripeMeteredSubItem ();
            }                
            if (name.equals ("NameOnCard"))
            {
                return toNameOnCard ();
            }                
            if (name.equals ("CardPostCode"))
            {
                return toCardPostCode ();
            }                
            if (name.equals ("CardID"))
            {
                return toCardID ();
            }                
            if (name.equals ("PlanRenewedOn"))
            {
                return toPlanRenewedOn ();
            }                
            if (name.equals ("UsedCredits"))
            {
                return toUsedCredits ();
            }                
            if (name.equals ("AvailableCredits"))
            {
                return toAvailableCredits ();
            }                
            if (name.equals ("IsPPJ"))
            {
                return toIsPPJ ();
            }                
            if (name.equals ("HasCap"))
            {
                return toHasCap ();
            }                
            if (name.equals ("MaxCap"))
            {
                return toMaxCap ();
            }                
            if (name.equals ("CouponExpiryDate"))
            {
                return toCouponExpiryDate ();
            }                
            if (name.equals ("LastPlanAmount"))
            {
                return toLastPlanAmount ();
            }                
            if (name.equals ("Company"))
            {
                return toCompany ();
            }                
            if (name.equals ("BilledByTeam"))
            {
                return toBilledByTeam ();
            }                
            if (name.equals ("AddedByUser"))
            {
                return toAddedByUser ();
            }                
            if (name.equals ("PaymentPlan"))
            {
                return toPaymentPlan ();
            }                
            if (name.equals ("Coupon"))
            {
                return toCoupon ();
            }                
            
            
            return super.to(name);
        }
        
        
        public PipeLine<From, Boolean> toIsLogoDeleted () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IsLogoDeleted));  }
        
        public PipeLine<From, String> toCouponCode () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CouponCode));  }
        
        public PipeLine<From, String> toStripeBrand () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeBrand));  }
        
        public PipeLine<From, String> toStripeLast4 () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeLast4));  }
        
        public PipeLine<From, String> toHiringTeamName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_HiringTeamName));  }
        
        public PipeLine<From, BinaryContent> toHiringTeamLogo () { return pipe(new ORMAttributePipe<Me, BinaryContent>(FIELD_HiringTeamLogo));  }
        
        public PipeLine<From, HiringTeamType> toHiringTeamType () { return pipe(new ORMAttributePipe<Me, HiringTeamType>(FIELD_HiringTeamType));  }
        
        public PipeLine<From, Industry> toIndustry () { return pipe(new ORMAttributePipe<Me, Industry>(FIELD_Industry));  }
        
        public PipeLine<From, TimeZone> toTimeZone () { return pipe(new ORMAttributePipe<Me, TimeZone>(FIELD_TimeZone));  }
        
        public PipeLine<From, State> toState () { return pipe(new ORMAttributePipe<Me, State>(FIELD_State));  }
        
        public PipeLine<From, Countries> toCountry () { return pipe(new ORMAttributePipe<Me, Countries>(FIELD_Country));  }
        
        public PipeLine<From, String> toPostCode () { return pipe(new ORMAttributePipe<Me, String>(FIELD_PostCode));  }
        
        public PipeLine<From, String> toCity () { return pipe(new ORMAttributePipe<Me, String>(FIELD_City));  }
        
        public PipeLine<From, Boolean> toHasClientSupport () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_HasClientSupport));  }
        
        public PipeLine<From, Boolean> toManageOwnBilling () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_ManageOwnBilling));  }
        
        public PipeLine<From, String> toStripeReference () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeReference));  }
        
        public PipeLine<From, String> toStripeSubscription () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeSubscription));  }
        
        public PipeLine<From, String> toStripeFixedSubItem () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeFixedSubItem));  }
        
        public PipeLine<From, String> toStripeMeteredSubItem () { return pipe(new ORMAttributePipe<Me, String>(FIELD_StripeMeteredSubItem));  }
        
        public PipeLine<From, String> toNameOnCard () { return pipe(new ORMAttributePipe<Me, String>(FIELD_NameOnCard));  }
        
        public PipeLine<From, String> toCardPostCode () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CardPostCode));  }
        
        public PipeLine<From, String> toCardID () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CardID));  }
        
        public PipeLine<From, Date> toPlanRenewedOn () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_PlanRenewedOn));  }
        
        public PipeLine<From, Integer> toUsedCredits () { return pipe(new ORMAttributePipe<Me, Integer>(FIELD_UsedCredits));  }
        
        public PipeLine<From, Integer> toAvailableCredits () { return pipe(new ORMAttributePipe<Me, Integer>(FIELD_AvailableCredits));  }
        
        public PipeLine<From, Boolean> toIsPPJ () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IsPPJ));  }
        
        public PipeLine<From, Boolean> toHasCap () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_HasCap));  }
        
        public PipeLine<From, Integer> toMaxCap () { return pipe(new ORMAttributePipe<Me, Integer>(FIELD_MaxCap));  }
        
        public PipeLine<From, Date> toCouponExpiryDate () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_CouponExpiryDate));  }
        
        public PipeLine<From, Double> toLastPlanAmount () { return pipe(new ORMAttributePipe<Me, Double>(FIELD_LastPlanAmount));  }
        public Company.CompanyPipeLineFactory<From, Company> toCompany () { return toCompany (Filter.ALL); }

        public Company.CompanyPipeLineFactory<From, Company> toCompany (Filter<Company> filter) 
        { 
            return Company.REFERENCE_Company.new CompanyPipeLineFactory<From, Company> (this, new ORMSingleAssocPipe<Me, Company>(SINGLEREFERENCE_Company, filter)); 
        }
        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toBilledByTeam () { return toBilledByTeam (Filter.ALL); }

        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toBilledByTeam (Filter<HiringTeam> filter) 
        { 
            return HiringTeam.REFERENCE_HiringTeam.new HiringTeamPipeLineFactory<From, HiringTeam> (this, new ORMSingleAssocPipe<Me, HiringTeam>(SINGLEREFERENCE_BilledByTeam, filter)); 
        }
        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toAddedByUser () { return toAddedByUser (Filter.ALL); }

        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toAddedByUser (Filter<CompanyUser> filter) 
        { 
            return CompanyUser.REFERENCE_CompanyUser.new CompanyUserPipeLineFactory<From, CompanyUser> (this, new ORMSingleAssocPipe<Me, CompanyUser>(SINGLEREFERENCE_AddedByUser, filter)); 
        }
        public PaymentPlan.PaymentPlanPipeLineFactory<From, PaymentPlan> toPaymentPlan () { return toPaymentPlan (Filter.ALL); }

        public PaymentPlan.PaymentPlanPipeLineFactory<From, PaymentPlan> toPaymentPlan (Filter<PaymentPlan> filter) 
        { 
            return PaymentPlan.REFERENCE_PaymentPlan.new PaymentPlanPipeLineFactory<From, PaymentPlan> (this, new ORMSingleAssocPipe<Me, PaymentPlan>(SINGLEREFERENCE_PaymentPlan, filter)); 
        }
        public StripeCoupon.StripeCouponPipeLineFactory<From, StripeCoupon> toCoupon () { return toCoupon (Filter.ALL); }

        public StripeCoupon.StripeCouponPipeLineFactory<From, StripeCoupon> toCoupon (Filter<StripeCoupon> filter) 
        { 
            return StripeCoupon.REFERENCE_StripeCoupon.new StripeCouponPipeLineFactory<From, StripeCoupon> (this, new ORMSingleAssocPipe<Me, StripeCoupon>(SINGLEREFERENCE_Coupon, filter)); 
        }
        public CompanyUserHiringTeamLink.CompanyUserHiringTeamLinkPipeLineFactory<From, CompanyUserHiringTeamLink> toUsers () { return toUsers(Filter.ALL); }        

        public CompanyUserHiringTeamLink.CompanyUserHiringTeamLinkPipeLineFactory<From, CompanyUserHiringTeamLink> toUsers (Filter<CompanyUserHiringTeamLink> filter)
        {
            return CompanyUserHiringTeamLink.REFERENCE_CompanyUserHiringTeamLink.new CompanyUserHiringTeamLinkPipeLineFactory<From, CompanyUserHiringTeamLink> (this, new ORMMultiAssocPipe<Me, CompanyUserHiringTeamLink>(MULTIPLEREFERENCE_Users, filter)); 
        }
        public Client.ClientPipeLineFactory<From, Client> toClients () { return toClients(Filter.ALL); }        

        public Client.ClientPipeLineFactory<From, Client> toClients (Filter<Client> filter)
        {
            return Client.REFERENCE_Client.new ClientPipeLineFactory<From, Client> (this, new ORMMultiAssocPipe<Me, Client>(MULTIPLEREFERENCE_Clients, filter)); 
        }
        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toBillingTeams () { return toBillingTeams(Filter.ALL); }        

        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toBillingTeams (Filter<HiringTeam> filter)
        {
            return HiringTeam.REFERENCE_HiringTeam.new HiringTeamPipeLineFactory<From, HiringTeam> (this, new ORMMultiAssocPipe<Me, HiringTeam>(MULTIPLEREFERENCE_BillingTeams, filter)); 
        }
        
    }
    
    public boolean isTransientAttrib(String attribName)
    {
        
        if(CollectionUtils.equals(attribName, "IsLogoDeleted"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CouponCode"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "StripeBrand"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "StripeLast4"))
        {
            return true;
        }
        

        return super.isTransientAttrib(attribName);
    }

    public boolean isTransientSingleReference(String assocName)
    {
        

        return super.isTransientSingleReference(assocName);
    }
}

class DummyHiringTeam extends HiringTeam
{
    // Default constructor primarily to support Externalisable
    public DummyHiringTeam()
    {
        super();
    }

    public void assertValid ()
    {
    }


    public Company getCompany () throws StorageException
    {
        return (Company)(Company.DUMMY_Company);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCompanyID ()
    {
        return Company.DUMMY_Company.getObjectID();
    }

    public HiringTeam getBilledByTeam () throws StorageException
    {
        return (HiringTeam)(HiringTeam.DUMMY_HiringTeam);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getBilledByTeamID ()
    {
        return HiringTeam.DUMMY_HiringTeam.getObjectID();
    }

    public CompanyUser getAddedByUser () throws StorageException
    {
        return (CompanyUser)(CompanyUser.DUMMY_CompanyUser);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getAddedByUserID ()
    {
        return CompanyUser.DUMMY_CompanyUser.getObjectID();
    }

    public PaymentPlan getPaymentPlan () throws StorageException
    {
        return (PaymentPlan)(PaymentPlan.DUMMY_PaymentPlan);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getPaymentPlanID ()
    {
        return PaymentPlan.DUMMY_PaymentPlan.getObjectID();
    }

    public StripeCoupon getCoupon () throws StorageException
    {
        return (StripeCoupon)(StripeCoupon.DUMMY_StripeCoupon);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCouponID ()
    {
        return StripeCoupon.DUMMY_StripeCoupon.getObjectID();
    }

    public int getUsersCount () throws StorageException
    {
        return 0;
    }


    public CompanyUserHiringTeamLink getUsersAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association Users");
    }


    public SortedSet getUsersSet () throws StorageException
    {
        return new TreeSet();
    }

    public int getClientsCount () throws StorageException
    {
        return 0;
    }


    public Client getClientsAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association Clients");
    }


    public SortedSet getClientsSet () throws StorageException
    {
        return new TreeSet();
    }

    public int getBillingTeamsCount () throws StorageException
    {
        return 0;
    }


    public HiringTeam getBillingTeamsAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association BillingTeams");
    }


    public SortedSet getBillingTeamsSet () throws StorageException
    {
        return new TreeSet();
    }

}

    
