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



public abstract class BaseJob extends BaseBusinessClass
{
    // Reference instance for the object
    public static final Job REFERENCE_Job = new Job ();

    // Reference instance for the object
    public static final Job DUMMY_Job = new DummyJob ();

    // Static constants corresponding to field names
    
    public static final String FIELD_JobTitle = "JobTitle";
    public static final String FIELD_JobDescription = "JobDescription";
    public static final String FIELD_JobStatus = "JobStatus";
    public static final String FIELD_OpenDate = "OpenDate";
    public static final String FIELD_ApplyBy = "ApplyBy";
    public static final String FIELD_IncludeAssessmentCriteria = "IncludeAssessmentCriteria";
    public static final String FIELD_AssessmentType = "AssessmentType";
    public static final String FIELD_RandomKey = "RandomKey";
    public static final String FIELD_JobType = "JobType";
    public static final String FIELD_ReferenceNumber = "ReferenceNumber";
    public static final String FIELD_LastStatusChangeDate = "LastStatusChangeDate";
    public static final String FIELD_Remote = "Remote";
    public static final String FIELD_City = "City";
    public static final String FIELD_PostCode = "PostCode";
    public static final String FIELD_ExpectedCandidateRadius = "ExpectedCandidateRadius";
    public static final String FIELD_State = "State";
    public static final String FIELD_Country = "Country";
    public static final String FIELD_RequireCV = "RequireCV";
    public static final String FIELD_IsManuallyClosed = "IsManuallyClosed";
    public static final String FIELD_LastEdited = "LastEdited";
    public static final String FIELD_IsPPJ = "IsPPJ";
    public static final String FIELD_Industry = "Industry";
    public static final String FIELD_CultureStatement = "CultureStatement";
    public static final String FIELD_DraftLocation = "DraftLocation";
    public static final String FIELD_GoogleAddressText = "GoogleAddressText";
    public static final String FIELD_Email = "Email";
    public static final String FIELD_Password = "Password";
    public static final String FIELD_ConfirmPassword = "ConfirmPassword";
    public static final String FIELD_CompletedDetails = "CompletedDetails";
    public static final String FIELD_CompletedRequirements = "CompletedRequirements";
    public static final String FIELD_CompletedCulture = "CompletedCulture";
    public static final String FIELD_CompletedAssessmentType = "CompletedAssessmentType";
    public static final String FIELD_SaveAssessmentTemplate = "SaveAssessmentTemplate";
    public static final String FIELD_SaveCultureTemplate = "SaveCultureTemplate";
    public static final String FIELD_FromTemplate = "FromTemplate";
    public static final String FIELD_AssessmentTemplateName = "AssessmentTemplateName";
    public static final String FIELD_CultureTemplateName = "CultureTemplateName";
    public static final String FIELD_AppProcessOption = "AppProcessOption";
    public static final String FIELD_RankingCompleted = "RankingCompleted";
    public static final String FIELD_OccupationId = "OccupationId";
    public static final String SINGLEREFERENCE_CultureTemplate = "CultureTemplate";
    public static final String SINGLEREFERENCE_JobTemplate = "JobTemplate";
    public static final String SINGLEREFERENCE_AppStatusWorkFlow = "AppStatusWorkFlow";
    public static final String SINGLEREFERENCE_Level = "Level";
    public static final String SINGLEREFERENCE_Client = "Client";
    public static final String BACKREF_Client = "";
    public static final String SINGLEREFERENCE_JobOwner = "JobOwner";
    public static final String SINGLEREFERENCE_CreatedBy = "CreatedBy";
    public static final String SINGLEREFERENCE_HiringTeam = "HiringTeam";
    public static final String SINGLEREFERENCE_Occupation = "Occupation";
    public static final String SINGLEREFERENCE_ShortenedURL = "ShortenedURL";
    public static final String SINGLEREFERENCE_AssessmentTemplate = "AssessmentTemplate";
    public static final String MULTIPLEREFERENCE_JobApplications = "JobApplications";
    public static final String BACKREF_JobApplications = "";
    public static final String MULTIPLEREFERENCE_AssessmentCriterias = "AssessmentCriterias";
    public static final String BACKREF_AssessmentCriterias = "";
    public static final String MULTIPLEREFERENCE_CultureCriterias = "CultureCriterias";
    public static final String BACKREF_CultureCriterias = "";
    public static final String MULTIPLEREFERENCE_WorkFlows = "WorkFlows";
    public static final String BACKREF_WorkFlows = "";

    // Static constants corresponding to searches
    public static final String SEARCH_All = "All";
    public static final String SEARCH_JobKey = "JobKey";
    public static final String SEARCH_Company = "Company";
    public static final String SEARCH_Details = "Details";
    

    // Static constants corresponding to attribute helpers
    private static final DefaultAttributeHelper<Job> HELPER_JobTitle = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_JobDescription = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, JobStatus> HELPER_JobStatus =  new EnumeratedAttributeHelper<Job, JobStatus> (JobStatus.FACTORY_JobStatus);
    private static final DefaultAttributeHelper<Job> HELPER_OpenDate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_ApplyBy = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_IncludeAssessmentCriteria = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, AssessmentType> HELPER_AssessmentType =  new EnumeratedAttributeHelper<Job, AssessmentType> (AssessmentType.FACTORY_AssessmentType);
    private static final DefaultAttributeHelper<Job> HELPER_RandomKey = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, JobType> HELPER_JobType =  new EnumeratedAttributeHelper<Job, JobType> (JobType.FACTORY_JobType);
    private static final DefaultAttributeHelper<Job> HELPER_ReferenceNumber = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_LastStatusChangeDate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_Remote = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_City = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_PostCode = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, LocationRadius> HELPER_ExpectedCandidateRadius =  new EnumeratedAttributeHelper<Job, LocationRadius> (LocationRadius.FACTORY_LocationRadius);
    private static final EnumeratedAttributeHelper<Job, State> HELPER_State =  new EnumeratedAttributeHelper<Job, State> (State.FACTORY_State);
    private static final EnumeratedAttributeHelper<Job, Countries> HELPER_Country =  new EnumeratedAttributeHelper<Job, Countries> (Countries.FACTORY_Countries);
    private static final DefaultAttributeHelper<Job> HELPER_RequireCV = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_IsManuallyClosed = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_LastEdited = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_IsPPJ = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, Industry> HELPER_Industry =  new EnumeratedAttributeHelper<Job, Industry> (Industry.FACTORY_Industry);
    private static final DefaultAttributeHelper<Job> HELPER_CultureStatement = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, DraftLocation> HELPER_DraftLocation =  new EnumeratedAttributeHelper<Job, DraftLocation> (DraftLocation.FACTORY_DraftLocation);
    private static final DefaultAttributeHelper<Job> HELPER_GoogleAddressText = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_Email = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_Password = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_ConfirmPassword = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_CompletedDetails = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_CompletedRequirements = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_CompletedCulture = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_CompletedAssessmentType = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_SaveAssessmentTemplate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_SaveCultureTemplate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_FromTemplate = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_AssessmentTemplateName = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_CultureTemplateName = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<Job, AppProcessOption> HELPER_AppProcessOption =  new EnumeratedAttributeHelper<Job, AppProcessOption> (AppProcessOption.FACTORY_AppProcessOption);
    private static final DefaultAttributeHelper<Job> HELPER_RankingCompleted = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<Job> HELPER_OccupationId = DefaultAttributeHelper.INSTANCE;
    

    // Private attributes corresponding to business object data
    private String _JobTitle;
    private String _JobDescription;
    private JobStatus _JobStatus;
    private Date _OpenDate;
    private Date _ApplyBy;
    private Boolean _IncludeAssessmentCriteria;
    private AssessmentType _AssessmentType;
    private String _RandomKey;
    private JobType _JobType;
    private String _ReferenceNumber;
    private Date _LastStatusChangeDate;
    private Boolean _Remote;
    private String _City;
    private String _PostCode;
    private LocationRadius _ExpectedCandidateRadius;
    private State _State;
    private Countries _Country;
    private Boolean _RequireCV;
    private Boolean _IsManuallyClosed;
    private Date _LastEdited;
    private Boolean _IsPPJ;
    private Industry _Industry;
    private String _CultureStatement;
    private DraftLocation _DraftLocation;
    private String _GoogleAddressText;
    private String _Email;
    private String _Password;
    private String _ConfirmPassword;
    private Boolean _CompletedDetails;
    private Boolean _CompletedRequirements;
    private Boolean _CompletedCulture;
    private Boolean _CompletedAssessmentType;
    private Boolean _SaveAssessmentTemplate;
    private Boolean _SaveCultureTemplate;
    private Boolean _FromTemplate;
    private String _AssessmentTemplateName;
    private String _CultureTemplateName;
    private AppProcessOption _AppProcessOption;
    private Boolean _RankingCompleted;
    private String _OccupationId;
    

    // Private attributes corresponding to single references
    private SingleAssociation<Job, CultureCriteriaTemplate> _CultureTemplate;
    private SingleAssociation<Job, Job> _JobTemplate;
    private SingleAssociation<Job, WorkFlow> _AppStatusWorkFlow;
    private SingleAssociation<Job, Level> _Level;
    private SingleAssociation<Job, Client> _Client;
    private SingleAssociation<Job, CompanyUser> _JobOwner;
    private SingleAssociation<Job, CompanyUser> _CreatedBy;
    private SingleAssociation<Job, HiringTeam> _HiringTeam;
    private SingleAssociation<Job, Occupation> _Occupation;
    private SingleAssociation<Job, ShortenedURL> _ShortenedURL;
    private SingleAssociation<Job, AssessmentCriteriaTemplate> _AssessmentTemplate;
    

    // Private attributes corresponding to multiple references
    private MultipleAssociation<Job, JobApplication> _JobApplications;
    private MultipleAssociation<Job, AssessmentCriteria> _AssessmentCriterias;
    private MultipleAssociation<Job, CultureCriteria> _CultureCriterias;
    private MultipleAssociation<Job, WorkFlow> _WorkFlows;
    

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

    // Arrays of validators for each attribute
    private static final AttributeValidator[] FIELD_Email_Validators;
    private static final AttributeValidator[] FIELD_Password_Validators;
    private static final AttributeValidator[] FIELD_ConfirmPassword_Validators;
    private static final AttributeValidator[] FIELD_CompletedDetails_Validators;
    private static final AttributeValidator[] FIELD_CompletedRequirements_Validators;
    private static final AttributeValidator[] FIELD_CompletedCulture_Validators;
    private static final AttributeValidator[] FIELD_CompletedAssessmentType_Validators;
    private static final AttributeValidator[] FIELD_SaveAssessmentTemplate_Validators;
    private static final AttributeValidator[] FIELD_SaveCultureTemplate_Validators;
    private static final AttributeValidator[] FIELD_FromTemplate_Validators;
    private static final AttributeValidator[] FIELD_AssessmentTemplateName_Validators;
    private static final AttributeValidator[] FIELD_CultureTemplateName_Validators;
    private static final AttributeValidator[] FIELD_AppProcessOption_Validators;
    private static final AttributeValidator[] FIELD_RankingCompleted_Validators;
    private static final AttributeValidator[] FIELD_OccupationId_Validators;
    private static final AttributeValidator[] FIELD_JobTitle_Validators;
    private static final AttributeValidator[] FIELD_JobDescription_Validators;
    private static final AttributeValidator[] FIELD_JobStatus_Validators;
    private static final AttributeValidator[] FIELD_OpenDate_Validators;
    private static final AttributeValidator[] FIELD_ApplyBy_Validators;
    private static final AttributeValidator[] FIELD_IncludeAssessmentCriteria_Validators;
    private static final AttributeValidator[] FIELD_AssessmentType_Validators;
    private static final AttributeValidator[] FIELD_RandomKey_Validators;
    private static final AttributeValidator[] FIELD_JobType_Validators;
    private static final AttributeValidator[] FIELD_ReferenceNumber_Validators;
    private static final AttributeValidator[] FIELD_LastStatusChangeDate_Validators;
    private static final AttributeValidator[] FIELD_Remote_Validators;
    private static final AttributeValidator[] FIELD_City_Validators;
    private static final AttributeValidator[] FIELD_PostCode_Validators;
    private static final AttributeValidator[] FIELD_ExpectedCandidateRadius_Validators;
    private static final AttributeValidator[] FIELD_State_Validators;
    private static final AttributeValidator[] FIELD_Country_Validators;
    private static final AttributeValidator[] FIELD_RequireCV_Validators;
    private static final AttributeValidator[] FIELD_IsManuallyClosed_Validators;
    private static final AttributeValidator[] FIELD_LastEdited_Validators;
    private static final AttributeValidator[] FIELD_IsPPJ_Validators;
    private static final AttributeValidator[] FIELD_Industry_Validators;
    private static final AttributeValidator[] FIELD_CultureStatement_Validators;
    private static final AttributeValidator[] FIELD_DraftLocation_Validators;
    private static final AttributeValidator[] FIELD_GoogleAddressText_Validators;
    

    // Arrays of behaviour decorators
    private static final JobBehaviourDecorator[] Job_BehaviourDecorators;
    
    static
    {
        try
        {
            
            String tmp_JobApplications = JobApplication.BACKREF_Job;
            String tmp_AssessmentCriterias = AssessmentCriteria.BACKREF_Job;
            String tmp_CultureCriterias = CultureCriteria.BACKREF_Job;
            String tmp_WorkFlows = WorkFlow.BACKREF_Job;
            String tmp_Client = Client.BACKREF_Jobs;
            
            Map  validatorMapping = ((Map)ConfigMgr.getConfigObject ("CONFIG.ORMVALIDATOR", "ValidatorMapping"));

            setupAssocMetaData_JobApplications();
            setupAssocMetaData_AssessmentCriterias();
            setupAssocMetaData_CultureCriterias();
            setupAssocMetaData_WorkFlows();
            setupAssocMetaData_CultureTemplate();
            setupAssocMetaData_JobTemplate();
            setupAssocMetaData_AppStatusWorkFlow();
            setupAssocMetaData_Level();
            setupAssocMetaData_Client();
            setupAssocMetaData_JobOwner();
            setupAssocMetaData_CreatedBy();
            setupAssocMetaData_HiringTeam();
            setupAssocMetaData_Occupation();
            setupAssocMetaData_ShortenedURL();
            setupAssocMetaData_AssessmentTemplate();
            FIELD_Email_Validators = (AttributeValidator[])setupAttribMetaData_Email(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Password_Validators = (AttributeValidator[])setupAttribMetaData_Password(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ConfirmPassword_Validators = (AttributeValidator[])setupAttribMetaData_ConfirmPassword(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CompletedDetails_Validators = (AttributeValidator[])setupAttribMetaData_CompletedDetails(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CompletedRequirements_Validators = (AttributeValidator[])setupAttribMetaData_CompletedRequirements(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CompletedCulture_Validators = (AttributeValidator[])setupAttribMetaData_CompletedCulture(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CompletedAssessmentType_Validators = (AttributeValidator[])setupAttribMetaData_CompletedAssessmentType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_SaveAssessmentTemplate_Validators = (AttributeValidator[])setupAttribMetaData_SaveAssessmentTemplate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_SaveCultureTemplate_Validators = (AttributeValidator[])setupAttribMetaData_SaveCultureTemplate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_FromTemplate_Validators = (AttributeValidator[])setupAttribMetaData_FromTemplate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_AssessmentTemplateName_Validators = (AttributeValidator[])setupAttribMetaData_AssessmentTemplateName(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CultureTemplateName_Validators = (AttributeValidator[])setupAttribMetaData_CultureTemplateName(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_AppProcessOption_Validators = (AttributeValidator[])setupAttribMetaData_AppProcessOption(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_RankingCompleted_Validators = (AttributeValidator[])setupAttribMetaData_RankingCompleted(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_OccupationId_Validators = (AttributeValidator[])setupAttribMetaData_OccupationId(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_JobTitle_Validators = (AttributeValidator[])setupAttribMetaData_JobTitle(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_JobDescription_Validators = (AttributeValidator[])setupAttribMetaData_JobDescription(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_JobStatus_Validators = (AttributeValidator[])setupAttribMetaData_JobStatus(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_OpenDate_Validators = (AttributeValidator[])setupAttribMetaData_OpenDate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ApplyBy_Validators = (AttributeValidator[])setupAttribMetaData_ApplyBy(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_IncludeAssessmentCriteria_Validators = (AttributeValidator[])setupAttribMetaData_IncludeAssessmentCriteria(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_AssessmentType_Validators = (AttributeValidator[])setupAttribMetaData_AssessmentType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_RandomKey_Validators = (AttributeValidator[])setupAttribMetaData_RandomKey(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_JobType_Validators = (AttributeValidator[])setupAttribMetaData_JobType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ReferenceNumber_Validators = (AttributeValidator[])setupAttribMetaData_ReferenceNumber(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_LastStatusChangeDate_Validators = (AttributeValidator[])setupAttribMetaData_LastStatusChangeDate(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Remote_Validators = (AttributeValidator[])setupAttribMetaData_Remote(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_City_Validators = (AttributeValidator[])setupAttribMetaData_City(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_PostCode_Validators = (AttributeValidator[])setupAttribMetaData_PostCode(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ExpectedCandidateRadius_Validators = (AttributeValidator[])setupAttribMetaData_ExpectedCandidateRadius(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_RequireCV_Validators = (AttributeValidator[])setupAttribMetaData_RequireCV(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_IsManuallyClosed_Validators = (AttributeValidator[])setupAttribMetaData_IsManuallyClosed(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_LastEdited_Validators = (AttributeValidator[])setupAttribMetaData_LastEdited(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_IsPPJ_Validators = (AttributeValidator[])setupAttribMetaData_IsPPJ(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Industry_Validators = (AttributeValidator[])setupAttribMetaData_Industry(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_CultureStatement_Validators = (AttributeValidator[])setupAttribMetaData_CultureStatement(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_DraftLocation_Validators = (AttributeValidator[])setupAttribMetaData_DraftLocation(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_GoogleAddressText_Validators = (AttributeValidator[])setupAttribMetaData_GoogleAddressText(validatorMapping).toArray (new AttributeValidator[0]);
            

            REFERENCE_Job.initialiseReference ();
            DUMMY_Job.initialiseReference ();
            Job_BehaviourDecorators = BaseBusinessClass.getBBCBehaviours(Job.class).toArray(new JobBehaviourDecorator[0]);
        }
        catch (RuntimeException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR1, e, "Error initialising");
            throw e;
        }
    }

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

        metaInfo.put ("backreferenceName", "Job");
        metaInfo.put ("name", "JobApplications");
        metaInfo.put ("type", "JobApplication");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobApplications:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (MULTIPLEREFERENCE_JobApplications, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_AssessmentCriterias()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "Job");
        metaInfo.put ("name", "AssessmentCriterias");
        metaInfo.put ("type", "AssessmentCriteria");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AssessmentCriterias:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (MULTIPLEREFERENCE_AssessmentCriterias, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_CultureCriterias()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "Job");
        metaInfo.put ("name", "CultureCriterias");
        metaInfo.put ("type", "CultureCriteria");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CultureCriterias:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (MULTIPLEREFERENCE_CultureCriterias, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_WorkFlows()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "Job");
        metaInfo.put ("name", "WorkFlows");
        metaInfo.put ("type", "WorkFlow");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.WorkFlows:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (MULTIPLEREFERENCE_WorkFlows, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_CultureTemplate()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("name", "CultureTemplate");
        metaInfo.put ("type", "CultureCriteriaTemplate");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CultureTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_CultureTemplate, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_JobTemplate()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("name", "JobTemplate");
        metaInfo.put ("type", "Job");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_JobTemplate, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_AppStatusWorkFlow()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("name", "AppStatusWorkFlow");
        metaInfo.put ("type", "WorkFlow");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AppStatusWorkFlow:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_AppStatusWorkFlow, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Level()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "level_id");
        metaInfo.put ("mandatory", "false");
        metaInfo.put ("name", "Level");
        metaInfo.put ("type", "Level");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Level:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_Level, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Client()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("backreferenceName", "Jobs");
        metaInfo.put ("dbcol", "client_id");
        metaInfo.put ("name", "Client");
        metaInfo.put ("type", "Client");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Client:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_Client, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_JobOwner()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "job_owner_id");
        metaInfo.put ("name", "JobOwner");
        metaInfo.put ("type", "CompanyUser");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobOwner:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_JobOwner, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_CreatedBy()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "company_user_id");
        metaInfo.put ("name", "CreatedBy");
        metaInfo.put ("type", "CompanyUser");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CreatedBy:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_CreatedBy, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_HiringTeam()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "hiring_team_id");
        metaInfo.put ("name", "HiringTeam");
        metaInfo.put ("type", "HiringTeam");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.HiringTeam:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_HiringTeam, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Occupation()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "occupation_id");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "Occupation");
        metaInfo.put ("type", "Occupation");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Occupation:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_Occupation, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_ShortenedURL()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "shortened_url_id");
        metaInfo.put ("name", "ShortenedURL");
        metaInfo.put ("type", "ShortenedURL");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.ShortenedURL:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_ShortenedURL, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_AssessmentTemplate()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "template_id");
        metaInfo.put ("name", "AssessmentTemplate");
        metaInfo.put ("type", "AssessmentCriteriaTemplate");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AssessmentTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (SINGLEREFERENCE_AssessmentTemplate, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static List setupAttribMetaData_Email(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("name", "Email");
        metaInfo.put ("type", "String");
        metaInfo.put ("validators", "Email");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Email:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_Email, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "Password");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Password:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_Password, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "ConfirmPassword");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.ConfirmPassword:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_ConfirmPassword, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "CompletedDetails");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedDetails:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CompletedDetails, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "CompletedRequirements");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedRequirements:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CompletedRequirements, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "CompletedCulture");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedCulture:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CompletedCulture, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "CompletedAssessmentType");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedAssessmentType:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CompletedAssessmentType, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "SaveAssessmentTemplate");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.SaveAssessmentTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_SaveAssessmentTemplate, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "SaveCultureTemplate");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.SaveCultureTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_SaveCultureTemplate, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "FromTemplate");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.FromTemplate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_FromTemplate, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "AssessmentTemplateName");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AssessmentTemplateName:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_AssessmentTemplateName, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "CultureTemplateName");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CultureTemplateName:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CultureTemplateName, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("name", "AppProcessOption");
        metaInfo.put ("type", "AppProcessOption");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AppProcessOption:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_AppProcessOption, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "RankingCompleted");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.RankingCompleted:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_RankingCompleted, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("name", "OccupationId");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.OccupationId:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_OccupationId, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "job_title");
        metaInfo.put ("length", "30");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "JobTitle");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobTitle:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_JobTitle, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "job_description");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "JobDescription");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobDescription:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_JobDescription, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "job_status");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "JobStatus");
        metaInfo.put ("type", "JobStatus");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobStatus:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_JobStatus, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "open_date");
        metaInfo.put ("name", "OpenDate");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.OpenDate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_OpenDate, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "apply_by");
        metaInfo.put ("name", "ApplyBy");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.ApplyBy:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_ApplyBy, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "include_assessment_criteria");
        metaInfo.put ("defaultValue", "Boolean.TRUE");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "IncludeAssessmentCriteria");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.IncludeAssessmentCriteria:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_IncludeAssessmentCriteria, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "assessment_type");
        metaInfo.put ("defaultValue", "AssessmentType.COMPREHENSIVE");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "AssessmentType");
        metaInfo.put ("type", "AssessmentType");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.AssessmentType:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_AssessmentType, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "random_key");
        metaInfo.put ("length", "10");
        metaInfo.put ("name", "RandomKey");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.RandomKey:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_RandomKey, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "job_type");
        metaInfo.put ("defaultValue", "JobType.FULL_TIME");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "JobType");
        metaInfo.put ("type", "JobType");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.JobType:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_JobType, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "ref_number");
        metaInfo.put ("length", "10");
        metaInfo.put ("name", "ReferenceNumber");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.ReferenceNumber:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_ReferenceNumber, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "last_status_change_date");
        metaInfo.put ("name", "LastStatusChangeDate");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.LastStatusChangeDate:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_LastStatusChangeDate, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "remote");
        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "Remote");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Remote:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_Remote, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(Job.class, "Remote", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.Remote:", 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 ("name", "City");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.City:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_City, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "postcode");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "PostCode");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.PostCode:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_PostCode, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "location_radius");
        metaInfo.put ("defaultValue", "LocationRadius.KM100");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "ExpectedCandidateRadius");
        metaInfo.put ("type", "LocationRadius");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.ExpectedCandidateRadius:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_ExpectedCandidateRadius, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(Job.class, "ExpectedCandidateRadius", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.ExpectedCandidateRadius:", 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 ("name", "State");
        metaInfo.put ("type", "State");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.State:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_State, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(Job.class, "State", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.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 ("name", "Country");
        metaInfo.put ("type", "Countries");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Country:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_Country, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "require_cv");
        metaInfo.put ("defaultValue", "Boolean.TRUE");
        metaInfo.put ("name", "RequireCV");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.RequireCV:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_RequireCV, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "manually_closed");
        metaInfo.put ("defaultValue", "Boolean.FALSE");
        metaInfo.put ("name", "IsManuallyClosed");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.IsManuallyClosed:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_IsManuallyClosed, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "last_edited");
        metaInfo.put ("name", "LastEdited");
        metaInfo.put ("type", "Date");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.LastEdited:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_LastEdited, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(Job.class, "LastEdited", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.LastEdited:", 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.FALSE");
        metaInfo.put ("name", "IsPPJ");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.IsPPJ:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_IsPPJ, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(Job.class, "IsPPJ", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.IsPPJ:", 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 ("name", "Industry");
        metaInfo.put ("type", "Industry");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.Industry:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_Industry, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "culture_statement");
        metaInfo.put ("length", "2000");
        metaInfo.put ("name", "CultureStatement");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CultureStatement:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_CultureStatement, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("dbcol", "draft_location");
        metaInfo.put ("name", "DraftLocation");
        metaInfo.put ("type", "DraftLocation");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.DraftLocation:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_DraftLocation, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "google_address_text");
        metaInfo.put ("length", "300");
        metaInfo.put ("name", "GoogleAddressText");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.GoogleAddressText:", metaInfo);
        ATTRIBUTES_METADATA_Job.put (FIELD_GoogleAddressText, Collections.unmodifiableMap (metaInfo));

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

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


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


    


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

        
        _JobTitle = (String)(HELPER_JobTitle.initialise (_JobTitle));
        _JobDescription = (String)(HELPER_JobDescription.initialise (_JobDescription));
        _JobStatus = (JobStatus)(HELPER_JobStatus.initialise (_JobStatus));
        _OpenDate = (Date)(HELPER_OpenDate.initialise (_OpenDate));
        _ApplyBy = (Date)(HELPER_ApplyBy.initialise (_ApplyBy));
        _IncludeAssessmentCriteria = (Boolean)(Boolean.TRUE);
        _AssessmentType = (AssessmentType)(AssessmentType.COMPREHENSIVE);
        _RandomKey = (String)(HELPER_RandomKey.initialise (_RandomKey));
        _JobType = (JobType)(JobType.FULL_TIME);
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.initialise (_ReferenceNumber));
        _LastStatusChangeDate = (Date)(HELPER_LastStatusChangeDate.initialise (_LastStatusChangeDate));
        _Remote = (Boolean)(Boolean.FALSE);
        _City = (String)(HELPER_City.initialise (_City));
        _PostCode = (String)(HELPER_PostCode.initialise (_PostCode));
        _ExpectedCandidateRadius = (LocationRadius)(LocationRadius.KM100);
        _State = (State)(State.WA);
        _Country = (Countries)(Countries.AU);
        _RequireCV = (Boolean)(Boolean.TRUE);
        _IsManuallyClosed = (Boolean)(Boolean.FALSE);
        _LastEdited = (Date)(HELPER_LastEdited.initialise (_LastEdited));
        _IsPPJ = (Boolean)(Boolean.FALSE);
        _Industry = (Industry)(HELPER_Industry.initialise (_Industry));
        _CultureStatement = (String)(HELPER_CultureStatement.initialise (_CultureStatement));
        _DraftLocation = (DraftLocation)(HELPER_DraftLocation.initialise (_DraftLocation));
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.initialise (_GoogleAddressText));
        _Email = (String)(HELPER_Email.initialise (_Email));
        _Password = (String)(HELPER_Password.initialise (_Password));
        _ConfirmPassword = (String)(HELPER_ConfirmPassword.initialise (_ConfirmPassword));
        _CompletedDetails = (Boolean)(Boolean.FALSE);
        _CompletedRequirements = (Boolean)(Boolean.FALSE);
        _CompletedCulture = (Boolean)(Boolean.FALSE);
        _CompletedAssessmentType = (Boolean)(Boolean.FALSE);
        _SaveAssessmentTemplate = (Boolean)(Boolean.FALSE);
        _SaveCultureTemplate = (Boolean)(Boolean.FALSE);
        _FromTemplate = (Boolean)(Boolean.FALSE);
        _AssessmentTemplateName = (String)(HELPER_AssessmentTemplateName.initialise (_AssessmentTemplateName));
        _CultureTemplateName = (String)(HELPER_CultureTemplateName.initialise (_CultureTemplateName));
        _AppProcessOption = (AppProcessOption)(HELPER_AppProcessOption.initialise (_AppProcessOption));
        _RankingCompleted = (Boolean)(HELPER_RankingCompleted.initialise (_RankingCompleted));
        _OccupationId = (String)(HELPER_OccupationId.initialise (_OccupationId));
    }


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

        _CultureTemplate = new SingleAssociation<Job, CultureCriteriaTemplate> (this, SINGLEREFERENCE_CultureTemplate, null, CultureCriteriaTemplate.REFERENCE_CultureCriteriaTemplate, "");
        _JobTemplate = new SingleAssociation<Job, Job> (this, SINGLEREFERENCE_JobTemplate, null, Job.REFERENCE_Job, "");
        _AppStatusWorkFlow = new SingleAssociation<Job, WorkFlow> (this, SINGLEREFERENCE_AppStatusWorkFlow, null, WorkFlow.REFERENCE_WorkFlow, "");
        _Level = new SingleAssociation<Job, Level> (this, SINGLEREFERENCE_Level, null, Level.REFERENCE_Level, "tl_job");
        _Client = new SingleAssociation<Job, Client> (this, SINGLEREFERENCE_Client, Client.MULTIPLEREFERENCE_Jobs, Client.REFERENCE_Client, "tl_job");
        _JobOwner = new SingleAssociation<Job, CompanyUser> (this, SINGLEREFERENCE_JobOwner, null, CompanyUser.REFERENCE_CompanyUser, "tl_job");
        _CreatedBy = new SingleAssociation<Job, CompanyUser> (this, SINGLEREFERENCE_CreatedBy, null, CompanyUser.REFERENCE_CompanyUser, "tl_job");
        _HiringTeam = new SingleAssociation<Job, HiringTeam> (this, SINGLEREFERENCE_HiringTeam, null, HiringTeam.REFERENCE_HiringTeam, "tl_job");
        _Occupation = new SingleAssociation<Job, Occupation> (this, SINGLEREFERENCE_Occupation, null, Occupation.REFERENCE_Occupation, "tl_job");
        _ShortenedURL = new SingleAssociation<Job, ShortenedURL> (this, SINGLEREFERENCE_ShortenedURL, null, ShortenedURL.REFERENCE_ShortenedURL, "tl_job");
        _AssessmentTemplate = new SingleAssociation<Job, AssessmentCriteriaTemplate> (this, SINGLEREFERENCE_AssessmentTemplate, null, AssessmentCriteriaTemplate.REFERENCE_AssessmentCriteriaTemplate, "tl_job");
        _JobApplications = new MultipleAssociation<Job, JobApplication> (this, MULTIPLEREFERENCE_JobApplications, JobApplication.SINGLEREFERENCE_Job, JobApplication.REFERENCE_JobApplication);
        _AssessmentCriterias = new MultipleAssociation<Job, AssessmentCriteria> (this, MULTIPLEREFERENCE_AssessmentCriterias, AssessmentCriteria.SINGLEREFERENCE_Job, AssessmentCriteria.REFERENCE_AssessmentCriteria);
        _CultureCriterias = new MultipleAssociation<Job, CultureCriteria> (this, MULTIPLEREFERENCE_CultureCriterias, CultureCriteria.SINGLEREFERENCE_Job, CultureCriteria.REFERENCE_CultureCriteria);
        _WorkFlows = new MultipleAssociation<Job, WorkFlow> (this, MULTIPLEREFERENCE_WorkFlows, WorkFlow.SINGLEREFERENCE_Job, WorkFlow.REFERENCE_WorkFlow);
        
    }


    // Initialise the associations
    protected BaseBusinessClass initialiseReference ()
    {
        super.initialiseReference ();
        
        _CultureTemplate = new SingleAssociation<Job, CultureCriteriaTemplate> (this, SINGLEREFERENCE_CultureTemplate, null, CultureCriteriaTemplate.REFERENCE_CultureCriteriaTemplate, "");
        _JobTemplate = new SingleAssociation<Job, Job> (this, SINGLEREFERENCE_JobTemplate, null, Job.REFERENCE_Job, "");
        _AppStatusWorkFlow = new SingleAssociation<Job, WorkFlow> (this, SINGLEREFERENCE_AppStatusWorkFlow, null, WorkFlow.REFERENCE_WorkFlow, "");
        _Level = new SingleAssociation<Job, Level> (this, SINGLEREFERENCE_Level, null, Level.REFERENCE_Level, "tl_job");
        _Client = new SingleAssociation<Job, Client> (this, SINGLEREFERENCE_Client, Client.MULTIPLEREFERENCE_Jobs, Client.REFERENCE_Client, "tl_job");
        _JobOwner = new SingleAssociation<Job, CompanyUser> (this, SINGLEREFERENCE_JobOwner, null, CompanyUser.REFERENCE_CompanyUser, "tl_job");
        _CreatedBy = new SingleAssociation<Job, CompanyUser> (this, SINGLEREFERENCE_CreatedBy, null, CompanyUser.REFERENCE_CompanyUser, "tl_job");
        _HiringTeam = new SingleAssociation<Job, HiringTeam> (this, SINGLEREFERENCE_HiringTeam, null, HiringTeam.REFERENCE_HiringTeam, "tl_job");
        _Occupation = new SingleAssociation<Job, Occupation> (this, SINGLEREFERENCE_Occupation, null, Occupation.REFERENCE_Occupation, "tl_job");
        _ShortenedURL = new SingleAssociation<Job, ShortenedURL> (this, SINGLEREFERENCE_ShortenedURL, null, ShortenedURL.REFERENCE_ShortenedURL, "tl_job");
        _AssessmentTemplate = new SingleAssociation<Job, AssessmentCriteriaTemplate> (this, SINGLEREFERENCE_AssessmentTemplate, null, AssessmentCriteriaTemplate.REFERENCE_AssessmentCriteriaTemplate, "tl_job");
        _JobApplications = new MultipleAssociation<Job, JobApplication> (this, MULTIPLEREFERENCE_JobApplications, JobApplication.SINGLEREFERENCE_Job, JobApplication.REFERENCE_JobApplication);
        _AssessmentCriterias = new MultipleAssociation<Job, AssessmentCriteria> (this, MULTIPLEREFERENCE_AssessmentCriterias, AssessmentCriteria.SINGLEREFERENCE_Job, AssessmentCriteria.REFERENCE_AssessmentCriteria);
        _CultureCriterias = new MultipleAssociation<Job, CultureCriteria> (this, MULTIPLEREFERENCE_CultureCriterias, CultureCriteria.SINGLEREFERENCE_Job, CultureCriteria.REFERENCE_CultureCriteria);
        _WorkFlows = new MultipleAssociation<Job, WorkFlow> (this, MULTIPLEREFERENCE_WorkFlows, WorkFlow.SINGLEREFERENCE_Job, WorkFlow.REFERENCE_WorkFlow);
        
        
        return this;
    }

    

    /**
     * Get the attribute JobTitle
     */
    public String getJobTitle ()
    {
        assertValid();
        String valToReturn = _JobTitle;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getJobTitle ((Job)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 preJobTitleChange (String newJobTitle) 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 postJobTitleChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute JobTitle.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setJobTitle (String newJobTitle) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_JobTitle.compare (_JobTitle, newJobTitle);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newJobTitle = bhd.setJobTitle ((Job)this, newJobTitle);
                oldAndNewIdentical = HELPER_JobTitle.compare (_JobTitle, newJobTitle);
            }

            BusinessObjectParser.assertFieldCondition (newJobTitle != null, this, FIELD_JobTitle, "mandatory");
            

            if (FIELD_JobTitle_Validators.length > 0)
            {
                Object newJobTitleObj = HELPER_JobTitle.toObject (newJobTitle);

                if (newJobTitleObj != null)
                {
                    int     loopMax = FIELD_JobTitle_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_JobTitle);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_JobTitle () != FieldWriteability.FALSE, "Field  JobTitle is not writeable");
            preJobTitleChange (newJobTitle);
            markFieldChange (FIELD_JobTitle);
            _JobTitle = newJobTitle;            
            postFieldChange (FIELD_JobTitle);
            postJobTitleChange ();
        }
    }

    /**
     * Get the attribute JobDescription
     */
    public String getJobDescription ()
    {
        assertValid();
        String valToReturn = _JobDescription;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getJobDescription ((Job)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 preJobDescriptionChange (String newJobDescription) 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 postJobDescriptionChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute JobDescription.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setJobDescription (String newJobDescription) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_JobDescription.compare (_JobDescription, newJobDescription);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newJobDescription = bhd.setJobDescription ((Job)this, newJobDescription);
                oldAndNewIdentical = HELPER_JobDescription.compare (_JobDescription, newJobDescription);
            }

            BusinessObjectParser.assertFieldCondition (newJobDescription != null, this, FIELD_JobDescription, "mandatory");
            

            if (FIELD_JobDescription_Validators.length > 0)
            {
                Object newJobDescriptionObj = HELPER_JobDescription.toObject (newJobDescription);

                if (newJobDescriptionObj != null)
                {
                    int     loopMax = FIELD_JobDescription_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_JobDescription);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_JobDescription () != FieldWriteability.FALSE, "Field  JobDescription is not writeable");
            preJobDescriptionChange (newJobDescription);
            markFieldChange (FIELD_JobDescription);
            _JobDescription = newJobDescription;            
            postFieldChange (FIELD_JobDescription);
            postJobDescriptionChange ();
        }
    }

    /**
     * Get the attribute JobStatus
     */
    public JobStatus getJobStatus ()
    {
        assertValid();
        JobStatus valToReturn = _JobStatus;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getJobStatus ((Job)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 preJobStatusChange (JobStatus newJobStatus) 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 postJobStatusChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute JobStatus.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setJobStatus (JobStatus newJobStatus) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_JobStatus.compare (_JobStatus, newJobStatus);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newJobStatus = bhd.setJobStatus ((Job)this, newJobStatus);
                oldAndNewIdentical = HELPER_JobStatus.compare (_JobStatus, newJobStatus);
            }

            BusinessObjectParser.assertFieldCondition (newJobStatus != null, this, FIELD_JobStatus, "mandatory");
            

            if (FIELD_JobStatus_Validators.length > 0)
            {
                Object newJobStatusObj = HELPER_JobStatus.toObject (newJobStatus);

                if (newJobStatusObj != null)
                {
                    int     loopMax = FIELD_JobStatus_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_JobStatus);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_JobStatus () != FieldWriteability.FALSE, "Field  JobStatus is not writeable");
            preJobStatusChange (newJobStatus);
            markFieldChange (FIELD_JobStatus);
            _JobStatus = newJobStatus;            
            postFieldChange (FIELD_JobStatus);
            postJobStatusChange ();
        }
    }

    /**
     * Get the attribute OpenDate
     */
    public Date getOpenDate ()
    {
        assertValid();
        Date valToReturn = _OpenDate;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getOpenDate ((Job)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 preOpenDateChange (Date newOpenDate) 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 postOpenDateChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute OpenDate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setOpenDate (Date newOpenDate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_OpenDate.compare (_OpenDate, newOpenDate);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newOpenDate = bhd.setOpenDate ((Job)this, newOpenDate);
                oldAndNewIdentical = HELPER_OpenDate.compare (_OpenDate, newOpenDate);
            }

            

            if (FIELD_OpenDate_Validators.length > 0)
            {
                Object newOpenDateObj = HELPER_OpenDate.toObject (newOpenDate);

                if (newOpenDateObj != null)
                {
                    int     loopMax = FIELD_OpenDate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_OpenDate);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_OpenDate () != FieldWriteability.FALSE, "Field  OpenDate is not writeable");
            preOpenDateChange (newOpenDate);
            markFieldChange (FIELD_OpenDate);
            _OpenDate = newOpenDate;            
            postFieldChange (FIELD_OpenDate);
            postOpenDateChange ();
        }
    }

    /**
     * Get the attribute ApplyBy
     */
    public Date getApplyBy ()
    {
        assertValid();
        Date valToReturn = _ApplyBy;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getApplyBy ((Job)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 preApplyByChange (Date newApplyBy) 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 postApplyByChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute ApplyBy.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setApplyBy (Date newApplyBy) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_ApplyBy.compare (_ApplyBy, newApplyBy);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newApplyBy = bhd.setApplyBy ((Job)this, newApplyBy);
                oldAndNewIdentical = HELPER_ApplyBy.compare (_ApplyBy, newApplyBy);
            }

            

            if (FIELD_ApplyBy_Validators.length > 0)
            {
                Object newApplyByObj = HELPER_ApplyBy.toObject (newApplyBy);

                if (newApplyByObj != null)
                {
                    int     loopMax = FIELD_ApplyBy_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_ApplyBy);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_ApplyBy () != FieldWriteability.FALSE, "Field  ApplyBy is not writeable");
            preApplyByChange (newApplyBy);
            markFieldChange (FIELD_ApplyBy);
            _ApplyBy = newApplyBy;            
            postFieldChange (FIELD_ApplyBy);
            postApplyByChange ();
        }
    }

    /**
     * Get the attribute IncludeAssessmentCriteria
     */
    public Boolean getIncludeAssessmentCriteria ()
    {
        assertValid();
        Boolean valToReturn = _IncludeAssessmentCriteria;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getIncludeAssessmentCriteria ((Job)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 preIncludeAssessmentCriteriaChange (Boolean newIncludeAssessmentCriteria) 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 postIncludeAssessmentCriteriaChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute IncludeAssessmentCriteria.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setIncludeAssessmentCriteria (Boolean newIncludeAssessmentCriteria) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_IncludeAssessmentCriteria.compare (_IncludeAssessmentCriteria, newIncludeAssessmentCriteria);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newIncludeAssessmentCriteria = bhd.setIncludeAssessmentCriteria ((Job)this, newIncludeAssessmentCriteria);
                oldAndNewIdentical = HELPER_IncludeAssessmentCriteria.compare (_IncludeAssessmentCriteria, newIncludeAssessmentCriteria);
            }

            BusinessObjectParser.assertFieldCondition (newIncludeAssessmentCriteria != null, this, FIELD_IncludeAssessmentCriteria, "mandatory");
            

            if (FIELD_IncludeAssessmentCriteria_Validators.length > 0)
            {
                Object newIncludeAssessmentCriteriaObj = HELPER_IncludeAssessmentCriteria.toObject (newIncludeAssessmentCriteria);

                if (newIncludeAssessmentCriteriaObj != null)
                {
                    int     loopMax = FIELD_IncludeAssessmentCriteria_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_IncludeAssessmentCriteria);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_IncludeAssessmentCriteria () != FieldWriteability.FALSE, "Field  IncludeAssessmentCriteria is not writeable");
            preIncludeAssessmentCriteriaChange (newIncludeAssessmentCriteria);
            markFieldChange (FIELD_IncludeAssessmentCriteria);
            _IncludeAssessmentCriteria = newIncludeAssessmentCriteria;            
            postFieldChange (FIELD_IncludeAssessmentCriteria);
            postIncludeAssessmentCriteriaChange ();
        }
    }

    /**
     * Get the attribute AssessmentType
     */
    public AssessmentType getAssessmentType ()
    {
        assertValid();
        AssessmentType valToReturn = _AssessmentType;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getAssessmentType ((Job)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 preAssessmentTypeChange (AssessmentType newAssessmentType) 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 postAssessmentTypeChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute AssessmentType.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setAssessmentType (AssessmentType newAssessmentType) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_AssessmentType.compare (_AssessmentType, newAssessmentType);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newAssessmentType = bhd.setAssessmentType ((Job)this, newAssessmentType);
                oldAndNewIdentical = HELPER_AssessmentType.compare (_AssessmentType, newAssessmentType);
            }

            BusinessObjectParser.assertFieldCondition (newAssessmentType != null, this, FIELD_AssessmentType, "mandatory");
            

            if (FIELD_AssessmentType_Validators.length > 0)
            {
                Object newAssessmentTypeObj = HELPER_AssessmentType.toObject (newAssessmentType);

                if (newAssessmentTypeObj != null)
                {
                    int     loopMax = FIELD_AssessmentType_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_AssessmentType);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_AssessmentType () != FieldWriteability.FALSE, "Field  AssessmentType is not writeable");
            preAssessmentTypeChange (newAssessmentType);
            markFieldChange (FIELD_AssessmentType);
            _AssessmentType = newAssessmentType;            
            postFieldChange (FIELD_AssessmentType);
            postAssessmentTypeChange ();
        }
    }

    /**
     * Get the attribute RandomKey
     */
    public String getRandomKey ()
    {
        assertValid();
        String valToReturn = _RandomKey;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getRandomKey ((Job)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 preRandomKeyChange (String newRandomKey) 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 postRandomKeyChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute RandomKey.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setRandomKey (String newRandomKey) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_RandomKey.compare (_RandomKey, newRandomKey);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newRandomKey = bhd.setRandomKey ((Job)this, newRandomKey);
                oldAndNewIdentical = HELPER_RandomKey.compare (_RandomKey, newRandomKey);
            }

            

            if (FIELD_RandomKey_Validators.length > 0)
            {
                Object newRandomKeyObj = HELPER_RandomKey.toObject (newRandomKey);

                if (newRandomKeyObj != null)
                {
                    int     loopMax = FIELD_RandomKey_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_RandomKey);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_RandomKey () != FieldWriteability.FALSE, "Field  RandomKey is not writeable");
            preRandomKeyChange (newRandomKey);
            markFieldChange (FIELD_RandomKey);
            _RandomKey = newRandomKey;            
            postFieldChange (FIELD_RandomKey);
            postRandomKeyChange ();
        }
    }

    /**
     * Get the attribute JobType
     */
    public JobType getJobType ()
    {
        assertValid();
        JobType valToReturn = _JobType;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getJobType ((Job)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 preJobTypeChange (JobType newJobType) 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 postJobTypeChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute JobType.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setJobType (JobType newJobType) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_JobType.compare (_JobType, newJobType);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newJobType = bhd.setJobType ((Job)this, newJobType);
                oldAndNewIdentical = HELPER_JobType.compare (_JobType, newJobType);
            }

            BusinessObjectParser.assertFieldCondition (newJobType != null, this, FIELD_JobType, "mandatory");
            

            if (FIELD_JobType_Validators.length > 0)
            {
                Object newJobTypeObj = HELPER_JobType.toObject (newJobType);

                if (newJobTypeObj != null)
                {
                    int     loopMax = FIELD_JobType_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_JobType);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_JobType () != FieldWriteability.FALSE, "Field  JobType is not writeable");
            preJobTypeChange (newJobType);
            markFieldChange (FIELD_JobType);
            _JobType = newJobType;            
            postFieldChange (FIELD_JobType);
            postJobTypeChange ();
        }
    }

    /**
     * Get the attribute ReferenceNumber
     */
    public String getReferenceNumber ()
    {
        assertValid();
        String valToReturn = _ReferenceNumber;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getReferenceNumber ((Job)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 preReferenceNumberChange (String newReferenceNumber) 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 postReferenceNumberChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute ReferenceNumber.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setReferenceNumber (String newReferenceNumber) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_ReferenceNumber.compare (_ReferenceNumber, newReferenceNumber);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newReferenceNumber = bhd.setReferenceNumber ((Job)this, newReferenceNumber);
                oldAndNewIdentical = HELPER_ReferenceNumber.compare (_ReferenceNumber, newReferenceNumber);
            }

            

            if (FIELD_ReferenceNumber_Validators.length > 0)
            {
                Object newReferenceNumberObj = HELPER_ReferenceNumber.toObject (newReferenceNumber);

                if (newReferenceNumberObj != null)
                {
                    int     loopMax = FIELD_ReferenceNumber_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_ReferenceNumber);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_ReferenceNumber () != FieldWriteability.FALSE, "Field  ReferenceNumber is not writeable");
            preReferenceNumberChange (newReferenceNumber);
            markFieldChange (FIELD_ReferenceNumber);
            _ReferenceNumber = newReferenceNumber;            
            postFieldChange (FIELD_ReferenceNumber);
            postReferenceNumberChange ();
        }
    }

    /**
     * Get the attribute LastStatusChangeDate
     */
    public Date getLastStatusChangeDate ()
    {
        assertValid();
        Date valToReturn = _LastStatusChangeDate;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getLastStatusChangeDate ((Job)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 preLastStatusChangeDateChange (Date newLastStatusChangeDate) 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 postLastStatusChangeDateChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute LastStatusChangeDate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setLastStatusChangeDate (Date newLastStatusChangeDate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_LastStatusChangeDate.compare (_LastStatusChangeDate, newLastStatusChangeDate);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newLastStatusChangeDate = bhd.setLastStatusChangeDate ((Job)this, newLastStatusChangeDate);
                oldAndNewIdentical = HELPER_LastStatusChangeDate.compare (_LastStatusChangeDate, newLastStatusChangeDate);
            }

            

            if (FIELD_LastStatusChangeDate_Validators.length > 0)
            {
                Object newLastStatusChangeDateObj = HELPER_LastStatusChangeDate.toObject (newLastStatusChangeDate);

                if (newLastStatusChangeDateObj != null)
                {
                    int     loopMax = FIELD_LastStatusChangeDate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_LastStatusChangeDate);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_LastStatusChangeDate () != FieldWriteability.FALSE, "Field  LastStatusChangeDate is not writeable");
            preLastStatusChangeDateChange (newLastStatusChangeDate);
            markFieldChange (FIELD_LastStatusChangeDate);
            _LastStatusChangeDate = newLastStatusChangeDate;            
            postFieldChange (FIELD_LastStatusChangeDate);
            postLastStatusChangeDateChange ();
        }
    }

    /**
     * Get the attribute Remote
     */
    public Boolean getRemote ()
    {
        assertValid();
        Boolean valToReturn = _Remote;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getRemote ((Job)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 preRemoteChange (Boolean newRemote) 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 postRemoteChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute Remote.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setRemote (Boolean newRemote) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_Remote.compare (_Remote, newRemote);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newRemote = bhd.setRemote ((Job)this, newRemote);
                oldAndNewIdentical = HELPER_Remote.compare (_Remote, newRemote);
            }

            

            if (FIELD_Remote_Validators.length > 0)
            {
                Object newRemoteObj = HELPER_Remote.toObject (newRemote);

                if (newRemoteObj != null)
                {
                    int     loopMax = FIELD_Remote_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_Remote);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_Remote () != FieldWriteability.FALSE, "Field  Remote is not writeable");
            preRemoteChange (newRemote);
            markFieldChange (FIELD_Remote);
            _Remote = newRemote;            
            postFieldChange (FIELD_Remote);
            postRemoteChange ();
        }
    }

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

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCity ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCity = bhd.setCity ((Job)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_Job.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 PostCode
     */
    public String getPostCode ()
    {
        assertValid();
        String valToReturn = _PostCode;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getPostCode ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newPostCode = bhd.setPostCode ((Job)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_Job.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 ExpectedCandidateRadius
     */
    public LocationRadius getExpectedCandidateRadius ()
    {
        assertValid();
        LocationRadius valToReturn = _ExpectedCandidateRadius;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getExpectedCandidateRadius ((Job)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 preExpectedCandidateRadiusChange (LocationRadius newExpectedCandidateRadius) 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 postExpectedCandidateRadiusChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute ExpectedCandidateRadius.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setExpectedCandidateRadius (LocationRadius newExpectedCandidateRadius) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_ExpectedCandidateRadius.compare (_ExpectedCandidateRadius, newExpectedCandidateRadius);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newExpectedCandidateRadius = bhd.setExpectedCandidateRadius ((Job)this, newExpectedCandidateRadius);
                oldAndNewIdentical = HELPER_ExpectedCandidateRadius.compare (_ExpectedCandidateRadius, newExpectedCandidateRadius);
            }

            BusinessObjectParser.assertFieldCondition (newExpectedCandidateRadius != null, this, FIELD_ExpectedCandidateRadius, "mandatory");
            

            if (FIELD_ExpectedCandidateRadius_Validators.length > 0)
            {
                Object newExpectedCandidateRadiusObj = HELPER_ExpectedCandidateRadius.toObject (newExpectedCandidateRadius);

                if (newExpectedCandidateRadiusObj != null)
                {
                    int     loopMax = FIELD_ExpectedCandidateRadius_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_ExpectedCandidateRadius);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_ExpectedCandidateRadius () != FieldWriteability.FALSE, "Field  ExpectedCandidateRadius is not writeable");
            preExpectedCandidateRadiusChange (newExpectedCandidateRadius);
            markFieldChange (FIELD_ExpectedCandidateRadius);
            _ExpectedCandidateRadius = newExpectedCandidateRadius;            
            postFieldChange (FIELD_ExpectedCandidateRadius);
            postExpectedCandidateRadiusChange ();
        }
    }

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

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getState ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newState = bhd.setState ((Job)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_Job.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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCountry ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCountry = bhd.setCountry ((Job)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_Job.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 RequireCV
     */
    public Boolean getRequireCV ()
    {
        assertValid();
        Boolean valToReturn = _RequireCV;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getRequireCV ((Job)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 preRequireCVChange (Boolean newRequireCV) 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 postRequireCVChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute RequireCV.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setRequireCV (Boolean newRequireCV) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_RequireCV.compare (_RequireCV, newRequireCV);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newRequireCV = bhd.setRequireCV ((Job)this, newRequireCV);
                oldAndNewIdentical = HELPER_RequireCV.compare (_RequireCV, newRequireCV);
            }

            

            if (FIELD_RequireCV_Validators.length > 0)
            {
                Object newRequireCVObj = HELPER_RequireCV.toObject (newRequireCV);

                if (newRequireCVObj != null)
                {
                    int     loopMax = FIELD_RequireCV_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_RequireCV);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_RequireCV () != FieldWriteability.FALSE, "Field  RequireCV is not writeable");
            preRequireCVChange (newRequireCV);
            markFieldChange (FIELD_RequireCV);
            _RequireCV = newRequireCV;            
            postFieldChange (FIELD_RequireCV);
            postRequireCVChange ();
        }
    }

    /**
     * Get the attribute IsManuallyClosed
     */
    public Boolean getIsManuallyClosed ()
    {
        assertValid();
        Boolean valToReturn = _IsManuallyClosed;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getIsManuallyClosed ((Job)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 preIsManuallyClosedChange (Boolean newIsManuallyClosed) 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 postIsManuallyClosedChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute IsManuallyClosed.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setIsManuallyClosed (Boolean newIsManuallyClosed) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_IsManuallyClosed.compare (_IsManuallyClosed, newIsManuallyClosed);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newIsManuallyClosed = bhd.setIsManuallyClosed ((Job)this, newIsManuallyClosed);
                oldAndNewIdentical = HELPER_IsManuallyClosed.compare (_IsManuallyClosed, newIsManuallyClosed);
            }

            

            if (FIELD_IsManuallyClosed_Validators.length > 0)
            {
                Object newIsManuallyClosedObj = HELPER_IsManuallyClosed.toObject (newIsManuallyClosed);

                if (newIsManuallyClosedObj != null)
                {
                    int     loopMax = FIELD_IsManuallyClosed_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_IsManuallyClosed);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_IsManuallyClosed () != FieldWriteability.FALSE, "Field  IsManuallyClosed is not writeable");
            preIsManuallyClosedChange (newIsManuallyClosed);
            markFieldChange (FIELD_IsManuallyClosed);
            _IsManuallyClosed = newIsManuallyClosed;            
            postFieldChange (FIELD_IsManuallyClosed);
            postIsManuallyClosedChange ();
        }
    }

    /**
     * Get the attribute LastEdited
     */
    public Date getLastEdited ()
    {
        assertValid();
        Date valToReturn = _LastEdited;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getLastEdited ((Job)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 preLastEditedChange (Date newLastEdited) 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 postLastEditedChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute LastEdited.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setLastEdited (Date newLastEdited) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_LastEdited.compare (_LastEdited, newLastEdited);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newLastEdited = bhd.setLastEdited ((Job)this, newLastEdited);
                oldAndNewIdentical = HELPER_LastEdited.compare (_LastEdited, newLastEdited);
            }

            

            if (FIELD_LastEdited_Validators.length > 0)
            {
                Object newLastEditedObj = HELPER_LastEdited.toObject (newLastEdited);

                if (newLastEditedObj != null)
                {
                    int     loopMax = FIELD_LastEdited_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_LastEdited);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_LastEdited () != FieldWriteability.FALSE, "Field  LastEdited is not writeable");
            preLastEditedChange (newLastEdited);
            markFieldChange (FIELD_LastEdited);
            _LastEdited = newLastEdited;            
            postFieldChange (FIELD_LastEdited);
            postLastEditedChange ();
        }
    }

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

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getIsPPJ ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newIsPPJ = bhd.setIsPPJ ((Job)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_Job.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 Industry
     */
    public Industry getIndustry ()
    {
        assertValid();
        Industry valToReturn = _Industry;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getIndustry ((Job)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 (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newIndustry = bhd.setIndustry ((Job)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_Job.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 CultureStatement
     */
    public String getCultureStatement ()
    {
        assertValid();
        String valToReturn = _CultureStatement;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCultureStatement ((Job)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 preCultureStatementChange (String newCultureStatement) 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 postCultureStatementChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CultureStatement.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCultureStatement (String newCultureStatement) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CultureStatement.compare (_CultureStatement, newCultureStatement);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCultureStatement = bhd.setCultureStatement ((Job)this, newCultureStatement);
                oldAndNewIdentical = HELPER_CultureStatement.compare (_CultureStatement, newCultureStatement);
            }

            

            if (FIELD_CultureStatement_Validators.length > 0)
            {
                Object newCultureStatementObj = HELPER_CultureStatement.toObject (newCultureStatement);

                if (newCultureStatementObj != null)
                {
                    int     loopMax = FIELD_CultureStatement_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CultureStatement);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CultureStatement () != FieldWriteability.FALSE, "Field  CultureStatement is not writeable");
            preCultureStatementChange (newCultureStatement);
            markFieldChange (FIELD_CultureStatement);
            _CultureStatement = newCultureStatement;            
            postFieldChange (FIELD_CultureStatement);
            postCultureStatementChange ();
        }
    }

    /**
     * Get the attribute DraftLocation
     */
    public DraftLocation getDraftLocation ()
    {
        assertValid();
        DraftLocation valToReturn = _DraftLocation;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getDraftLocation ((Job)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 preDraftLocationChange (DraftLocation newDraftLocation) 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 postDraftLocationChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute DraftLocation.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setDraftLocation (DraftLocation newDraftLocation) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_DraftLocation.compare (_DraftLocation, newDraftLocation);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newDraftLocation = bhd.setDraftLocation ((Job)this, newDraftLocation);
                oldAndNewIdentical = HELPER_DraftLocation.compare (_DraftLocation, newDraftLocation);
            }

            

            if (FIELD_DraftLocation_Validators.length > 0)
            {
                Object newDraftLocationObj = HELPER_DraftLocation.toObject (newDraftLocation);

                if (newDraftLocationObj != null)
                {
                    int     loopMax = FIELD_DraftLocation_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_DraftLocation);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_DraftLocation () != FieldWriteability.FALSE, "Field  DraftLocation is not writeable");
            preDraftLocationChange (newDraftLocation);
            markFieldChange (FIELD_DraftLocation);
            _DraftLocation = newDraftLocation;            
            postFieldChange (FIELD_DraftLocation);
            postDraftLocationChange ();
        }
    }

    /**
     * Get the attribute GoogleAddressText
     */
    public String getGoogleAddressText ()
    {
        assertValid();
        String valToReturn = _GoogleAddressText;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getGoogleAddressText ((Job)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 preGoogleAddressTextChange (String newGoogleAddressText) 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 postGoogleAddressTextChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute GoogleAddressText.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setGoogleAddressText (String newGoogleAddressText) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_GoogleAddressText.compare (_GoogleAddressText, newGoogleAddressText);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newGoogleAddressText = bhd.setGoogleAddressText ((Job)this, newGoogleAddressText);
                oldAndNewIdentical = HELPER_GoogleAddressText.compare (_GoogleAddressText, newGoogleAddressText);
            }

            

            if (FIELD_GoogleAddressText_Validators.length > 0)
            {
                Object newGoogleAddressTextObj = HELPER_GoogleAddressText.toObject (newGoogleAddressText);

                if (newGoogleAddressTextObj != null)
                {
                    int     loopMax = FIELD_GoogleAddressText_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_GoogleAddressText);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_GoogleAddressText () != FieldWriteability.FALSE, "Field  GoogleAddressText is not writeable");
            preGoogleAddressTextChange (newGoogleAddressText);
            markFieldChange (FIELD_GoogleAddressText);
            _GoogleAddressText = newGoogleAddressText;            
            postFieldChange (FIELD_GoogleAddressText);
            postGoogleAddressTextChange ();
        }
    }

    /**
     * Get the attribute Email
     */
    public String getEmail ()
    {
        assertValid();
        String valToReturn = _Email;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getEmail ((Job)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 preEmailChange (String newEmail) 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 postEmailChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute Email.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setEmail (String newEmail) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_Email.compare (_Email, newEmail);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newEmail = bhd.setEmail ((Job)this, newEmail);
                oldAndNewIdentical = HELPER_Email.compare (_Email, newEmail);
            }

            

            if (FIELD_Email_Validators.length > 0)
            {
                Object newEmailObj = HELPER_Email.toObject (newEmail);

                if (newEmailObj != null)
                {
                    int     loopMax = FIELD_Email_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_Email);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_Email () != FieldWriteability.FALSE, "Field  Email is not writeable");
            preEmailChange (newEmail);
            markFieldChange (FIELD_Email);
            _Email = newEmail;            
            postFieldChange (FIELD_Email);
            postEmailChange ();
        }
    }

    /**
     * Get the attribute Password
     */
    public String getPassword ()
    {
        assertValid();
        String valToReturn = _Password;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getPassword ((Job)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 prePasswordChange (String newPassword) 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 postPasswordChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute Password.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setPassword (String newPassword) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_Password.compare (_Password, newPassword);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newPassword = bhd.setPassword ((Job)this, newPassword);
                oldAndNewIdentical = HELPER_Password.compare (_Password, newPassword);
            }

            

            if (FIELD_Password_Validators.length > 0)
            {
                Object newPasswordObj = HELPER_Password.toObject (newPassword);

                if (newPasswordObj != null)
                {
                    int     loopMax = FIELD_Password_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_Password);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_Password () != FieldWriteability.FALSE, "Field  Password is not writeable");
            prePasswordChange (newPassword);
            markFieldChange (FIELD_Password);
            _Password = newPassword;            
            postFieldChange (FIELD_Password);
            postPasswordChange ();
        }
    }

    /**
     * Get the attribute ConfirmPassword
     */
    public String getConfirmPassword ()
    {
        assertValid();
        String valToReturn = _ConfirmPassword;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getConfirmPassword ((Job)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 preConfirmPasswordChange (String newConfirmPassword) 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 postConfirmPasswordChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute ConfirmPassword.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setConfirmPassword (String newConfirmPassword) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_ConfirmPassword.compare (_ConfirmPassword, newConfirmPassword);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newConfirmPassword = bhd.setConfirmPassword ((Job)this, newConfirmPassword);
                oldAndNewIdentical = HELPER_ConfirmPassword.compare (_ConfirmPassword, newConfirmPassword);
            }

            

            if (FIELD_ConfirmPassword_Validators.length > 0)
            {
                Object newConfirmPasswordObj = HELPER_ConfirmPassword.toObject (newConfirmPassword);

                if (newConfirmPasswordObj != null)
                {
                    int     loopMax = FIELD_ConfirmPassword_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_ConfirmPassword);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_ConfirmPassword () != FieldWriteability.FALSE, "Field  ConfirmPassword is not writeable");
            preConfirmPasswordChange (newConfirmPassword);
            markFieldChange (FIELD_ConfirmPassword);
            _ConfirmPassword = newConfirmPassword;            
            postFieldChange (FIELD_ConfirmPassword);
            postConfirmPasswordChange ();
        }
    }

    /**
     * Get the attribute CompletedDetails
     */
    public Boolean getCompletedDetails ()
    {
        assertValid();
        Boolean valToReturn = _CompletedDetails;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCompletedDetails ((Job)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 preCompletedDetailsChange (Boolean newCompletedDetails) 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 postCompletedDetailsChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CompletedDetails.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCompletedDetails (Boolean newCompletedDetails) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CompletedDetails.compare (_CompletedDetails, newCompletedDetails);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCompletedDetails = bhd.setCompletedDetails ((Job)this, newCompletedDetails);
                oldAndNewIdentical = HELPER_CompletedDetails.compare (_CompletedDetails, newCompletedDetails);
            }

            

            if (FIELD_CompletedDetails_Validators.length > 0)
            {
                Object newCompletedDetailsObj = HELPER_CompletedDetails.toObject (newCompletedDetails);

                if (newCompletedDetailsObj != null)
                {
                    int     loopMax = FIELD_CompletedDetails_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedDetails);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CompletedDetails () != FieldWriteability.FALSE, "Field  CompletedDetails is not writeable");
            preCompletedDetailsChange (newCompletedDetails);
            markFieldChange (FIELD_CompletedDetails);
            _CompletedDetails = newCompletedDetails;            
            postFieldChange (FIELD_CompletedDetails);
            postCompletedDetailsChange ();
        }
    }

    /**
     * Get the attribute CompletedRequirements
     */
    public Boolean getCompletedRequirements ()
    {
        assertValid();
        Boolean valToReturn = _CompletedRequirements;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCompletedRequirements ((Job)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 preCompletedRequirementsChange (Boolean newCompletedRequirements) 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 postCompletedRequirementsChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CompletedRequirements.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCompletedRequirements (Boolean newCompletedRequirements) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CompletedRequirements.compare (_CompletedRequirements, newCompletedRequirements);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCompletedRequirements = bhd.setCompletedRequirements ((Job)this, newCompletedRequirements);
                oldAndNewIdentical = HELPER_CompletedRequirements.compare (_CompletedRequirements, newCompletedRequirements);
            }

            

            if (FIELD_CompletedRequirements_Validators.length > 0)
            {
                Object newCompletedRequirementsObj = HELPER_CompletedRequirements.toObject (newCompletedRequirements);

                if (newCompletedRequirementsObj != null)
                {
                    int     loopMax = FIELD_CompletedRequirements_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedRequirements);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CompletedRequirements () != FieldWriteability.FALSE, "Field  CompletedRequirements is not writeable");
            preCompletedRequirementsChange (newCompletedRequirements);
            markFieldChange (FIELD_CompletedRequirements);
            _CompletedRequirements = newCompletedRequirements;            
            postFieldChange (FIELD_CompletedRequirements);
            postCompletedRequirementsChange ();
        }
    }

    /**
     * Get the attribute CompletedCulture
     */
    public Boolean getCompletedCulture ()
    {
        assertValid();
        Boolean valToReturn = _CompletedCulture;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCompletedCulture ((Job)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 preCompletedCultureChange (Boolean newCompletedCulture) 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 postCompletedCultureChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CompletedCulture.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCompletedCulture (Boolean newCompletedCulture) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CompletedCulture.compare (_CompletedCulture, newCompletedCulture);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCompletedCulture = bhd.setCompletedCulture ((Job)this, newCompletedCulture);
                oldAndNewIdentical = HELPER_CompletedCulture.compare (_CompletedCulture, newCompletedCulture);
            }

            

            if (FIELD_CompletedCulture_Validators.length > 0)
            {
                Object newCompletedCultureObj = HELPER_CompletedCulture.toObject (newCompletedCulture);

                if (newCompletedCultureObj != null)
                {
                    int     loopMax = FIELD_CompletedCulture_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedCulture);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CompletedCulture () != FieldWriteability.FALSE, "Field  CompletedCulture is not writeable");
            preCompletedCultureChange (newCompletedCulture);
            markFieldChange (FIELD_CompletedCulture);
            _CompletedCulture = newCompletedCulture;            
            postFieldChange (FIELD_CompletedCulture);
            postCompletedCultureChange ();
        }
    }

    /**
     * Get the attribute CompletedAssessmentType
     */
    public Boolean getCompletedAssessmentType ()
    {
        assertValid();
        Boolean valToReturn = _CompletedAssessmentType;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCompletedAssessmentType ((Job)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 preCompletedAssessmentTypeChange (Boolean newCompletedAssessmentType) 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 postCompletedAssessmentTypeChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CompletedAssessmentType.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCompletedAssessmentType (Boolean newCompletedAssessmentType) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CompletedAssessmentType.compare (_CompletedAssessmentType, newCompletedAssessmentType);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCompletedAssessmentType = bhd.setCompletedAssessmentType ((Job)this, newCompletedAssessmentType);
                oldAndNewIdentical = HELPER_CompletedAssessmentType.compare (_CompletedAssessmentType, newCompletedAssessmentType);
            }

            

            if (FIELD_CompletedAssessmentType_Validators.length > 0)
            {
                Object newCompletedAssessmentTypeObj = HELPER_CompletedAssessmentType.toObject (newCompletedAssessmentType);

                if (newCompletedAssessmentTypeObj != null)
                {
                    int     loopMax = FIELD_CompletedAssessmentType_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedAssessmentType);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CompletedAssessmentType () != FieldWriteability.FALSE, "Field  CompletedAssessmentType is not writeable");
            preCompletedAssessmentTypeChange (newCompletedAssessmentType);
            markFieldChange (FIELD_CompletedAssessmentType);
            _CompletedAssessmentType = newCompletedAssessmentType;            
            postFieldChange (FIELD_CompletedAssessmentType);
            postCompletedAssessmentTypeChange ();
        }
    }

    /**
     * Get the attribute SaveAssessmentTemplate
     */
    public Boolean getSaveAssessmentTemplate ()
    {
        assertValid();
        Boolean valToReturn = _SaveAssessmentTemplate;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getSaveAssessmentTemplate ((Job)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 preSaveAssessmentTemplateChange (Boolean newSaveAssessmentTemplate) 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 postSaveAssessmentTemplateChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute SaveAssessmentTemplate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setSaveAssessmentTemplate (Boolean newSaveAssessmentTemplate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_SaveAssessmentTemplate.compare (_SaveAssessmentTemplate, newSaveAssessmentTemplate);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newSaveAssessmentTemplate = bhd.setSaveAssessmentTemplate ((Job)this, newSaveAssessmentTemplate);
                oldAndNewIdentical = HELPER_SaveAssessmentTemplate.compare (_SaveAssessmentTemplate, newSaveAssessmentTemplate);
            }

            

            if (FIELD_SaveAssessmentTemplate_Validators.length > 0)
            {
                Object newSaveAssessmentTemplateObj = HELPER_SaveAssessmentTemplate.toObject (newSaveAssessmentTemplate);

                if (newSaveAssessmentTemplateObj != null)
                {
                    int     loopMax = FIELD_SaveAssessmentTemplate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_SaveAssessmentTemplate);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_SaveAssessmentTemplate () != FieldWriteability.FALSE, "Field  SaveAssessmentTemplate is not writeable");
            preSaveAssessmentTemplateChange (newSaveAssessmentTemplate);
            markFieldChange (FIELD_SaveAssessmentTemplate);
            _SaveAssessmentTemplate = newSaveAssessmentTemplate;            
            postFieldChange (FIELD_SaveAssessmentTemplate);
            postSaveAssessmentTemplateChange ();
        }
    }

    /**
     * Get the attribute SaveCultureTemplate
     */
    public Boolean getSaveCultureTemplate ()
    {
        assertValid();
        Boolean valToReturn = _SaveCultureTemplate;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getSaveCultureTemplate ((Job)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 preSaveCultureTemplateChange (Boolean newSaveCultureTemplate) 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 postSaveCultureTemplateChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute SaveCultureTemplate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setSaveCultureTemplate (Boolean newSaveCultureTemplate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_SaveCultureTemplate.compare (_SaveCultureTemplate, newSaveCultureTemplate);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newSaveCultureTemplate = bhd.setSaveCultureTemplate ((Job)this, newSaveCultureTemplate);
                oldAndNewIdentical = HELPER_SaveCultureTemplate.compare (_SaveCultureTemplate, newSaveCultureTemplate);
            }

            

            if (FIELD_SaveCultureTemplate_Validators.length > 0)
            {
                Object newSaveCultureTemplateObj = HELPER_SaveCultureTemplate.toObject (newSaveCultureTemplate);

                if (newSaveCultureTemplateObj != null)
                {
                    int     loopMax = FIELD_SaveCultureTemplate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_SaveCultureTemplate);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_SaveCultureTemplate () != FieldWriteability.FALSE, "Field  SaveCultureTemplate is not writeable");
            preSaveCultureTemplateChange (newSaveCultureTemplate);
            markFieldChange (FIELD_SaveCultureTemplate);
            _SaveCultureTemplate = newSaveCultureTemplate;            
            postFieldChange (FIELD_SaveCultureTemplate);
            postSaveCultureTemplateChange ();
        }
    }

    /**
     * Get the attribute FromTemplate
     */
    public Boolean getFromTemplate ()
    {
        assertValid();
        Boolean valToReturn = _FromTemplate;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getFromTemplate ((Job)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 preFromTemplateChange (Boolean newFromTemplate) 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 postFromTemplateChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute FromTemplate.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setFromTemplate (Boolean newFromTemplate) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_FromTemplate.compare (_FromTemplate, newFromTemplate);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newFromTemplate = bhd.setFromTemplate ((Job)this, newFromTemplate);
                oldAndNewIdentical = HELPER_FromTemplate.compare (_FromTemplate, newFromTemplate);
            }

            

            if (FIELD_FromTemplate_Validators.length > 0)
            {
                Object newFromTemplateObj = HELPER_FromTemplate.toObject (newFromTemplate);

                if (newFromTemplateObj != null)
                {
                    int     loopMax = FIELD_FromTemplate_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_FromTemplate);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_FromTemplate () != FieldWriteability.FALSE, "Field  FromTemplate is not writeable");
            preFromTemplateChange (newFromTemplate);
            markFieldChange (FIELD_FromTemplate);
            _FromTemplate = newFromTemplate;            
            postFieldChange (FIELD_FromTemplate);
            postFromTemplateChange ();
        }
    }

    /**
     * Get the attribute AssessmentTemplateName
     */
    public String getAssessmentTemplateName ()
    {
        assertValid();
        String valToReturn = _AssessmentTemplateName;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getAssessmentTemplateName ((Job)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 preAssessmentTemplateNameChange (String newAssessmentTemplateName) 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 postAssessmentTemplateNameChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute AssessmentTemplateName.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setAssessmentTemplateName (String newAssessmentTemplateName) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_AssessmentTemplateName.compare (_AssessmentTemplateName, newAssessmentTemplateName);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newAssessmentTemplateName = bhd.setAssessmentTemplateName ((Job)this, newAssessmentTemplateName);
                oldAndNewIdentical = HELPER_AssessmentTemplateName.compare (_AssessmentTemplateName, newAssessmentTemplateName);
            }

            

            if (FIELD_AssessmentTemplateName_Validators.length > 0)
            {
                Object newAssessmentTemplateNameObj = HELPER_AssessmentTemplateName.toObject (newAssessmentTemplateName);

                if (newAssessmentTemplateNameObj != null)
                {
                    int     loopMax = FIELD_AssessmentTemplateName_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_AssessmentTemplateName);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_AssessmentTemplateName () != FieldWriteability.FALSE, "Field  AssessmentTemplateName is not writeable");
            preAssessmentTemplateNameChange (newAssessmentTemplateName);
            markFieldChange (FIELD_AssessmentTemplateName);
            _AssessmentTemplateName = newAssessmentTemplateName;            
            postFieldChange (FIELD_AssessmentTemplateName);
            postAssessmentTemplateNameChange ();
        }
    }

    /**
     * Get the attribute CultureTemplateName
     */
    public String getCultureTemplateName ()
    {
        assertValid();
        String valToReturn = _CultureTemplateName;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getCultureTemplateName ((Job)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 preCultureTemplateNameChange (String newCultureTemplateName) 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 postCultureTemplateNameChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute CultureTemplateName.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setCultureTemplateName (String newCultureTemplateName) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_CultureTemplateName.compare (_CultureTemplateName, newCultureTemplateName);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newCultureTemplateName = bhd.setCultureTemplateName ((Job)this, newCultureTemplateName);
                oldAndNewIdentical = HELPER_CultureTemplateName.compare (_CultureTemplateName, newCultureTemplateName);
            }

            

            if (FIELD_CultureTemplateName_Validators.length > 0)
            {
                Object newCultureTemplateNameObj = HELPER_CultureTemplateName.toObject (newCultureTemplateName);

                if (newCultureTemplateNameObj != null)
                {
                    int     loopMax = FIELD_CultureTemplateName_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CultureTemplateName);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_CultureTemplateName () != FieldWriteability.FALSE, "Field  CultureTemplateName is not writeable");
            preCultureTemplateNameChange (newCultureTemplateName);
            markFieldChange (FIELD_CultureTemplateName);
            _CultureTemplateName = newCultureTemplateName;            
            postFieldChange (FIELD_CultureTemplateName);
            postCultureTemplateNameChange ();
        }
    }

    /**
     * Get the attribute AppProcessOption
     */
    public AppProcessOption getAppProcessOption ()
    {
        assertValid();
        AppProcessOption valToReturn = _AppProcessOption;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getAppProcessOption ((Job)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 preAppProcessOptionChange (AppProcessOption newAppProcessOption) 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 postAppProcessOptionChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute AppProcessOption.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setAppProcessOption (AppProcessOption newAppProcessOption) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_AppProcessOption.compare (_AppProcessOption, newAppProcessOption);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newAppProcessOption = bhd.setAppProcessOption ((Job)this, newAppProcessOption);
                oldAndNewIdentical = HELPER_AppProcessOption.compare (_AppProcessOption, newAppProcessOption);
            }

            

            if (FIELD_AppProcessOption_Validators.length > 0)
            {
                Object newAppProcessOptionObj = HELPER_AppProcessOption.toObject (newAppProcessOption);

                if (newAppProcessOptionObj != null)
                {
                    int     loopMax = FIELD_AppProcessOption_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_AppProcessOption);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_AppProcessOption () != FieldWriteability.FALSE, "Field  AppProcessOption is not writeable");
            preAppProcessOptionChange (newAppProcessOption);
            markFieldChange (FIELD_AppProcessOption);
            _AppProcessOption = newAppProcessOption;            
            postFieldChange (FIELD_AppProcessOption);
            postAppProcessOptionChange ();
        }
    }

    /**
     * Get the attribute RankingCompleted
     */
    public Boolean getRankingCompleted ()
    {
        assertValid();
        Boolean valToReturn = _RankingCompleted;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getRankingCompleted ((Job)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 preRankingCompletedChange (Boolean newRankingCompleted) 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 postRankingCompletedChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute RankingCompleted.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setRankingCompleted (Boolean newRankingCompleted) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_RankingCompleted.compare (_RankingCompleted, newRankingCompleted);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newRankingCompleted = bhd.setRankingCompleted ((Job)this, newRankingCompleted);
                oldAndNewIdentical = HELPER_RankingCompleted.compare (_RankingCompleted, newRankingCompleted);
            }

            

            if (FIELD_RankingCompleted_Validators.length > 0)
            {
                Object newRankingCompletedObj = HELPER_RankingCompleted.toObject (newRankingCompleted);

                if (newRankingCompletedObj != null)
                {
                    int     loopMax = FIELD_RankingCompleted_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_RankingCompleted);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_RankingCompleted () != FieldWriteability.FALSE, "Field  RankingCompleted is not writeable");
            preRankingCompletedChange (newRankingCompleted);
            markFieldChange (FIELD_RankingCompleted);
            _RankingCompleted = newRankingCompleted;            
            postFieldChange (FIELD_RankingCompleted);
            postRankingCompletedChange ();
        }
    }

    /**
     * Get the attribute OccupationId
     */
    public String getOccupationId ()
    {
        assertValid();
        String valToReturn = _OccupationId;

            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                valToReturn = bhd.getOccupationId ((Job)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 preOccupationIdChange (String newOccupationId) 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 postOccupationIdChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute OccupationId.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setOccupationId (String newOccupationId) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_OccupationId.compare (_OccupationId, newOccupationId);
        
        try
        {
            for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
            {
                newOccupationId = bhd.setOccupationId ((Job)this, newOccupationId);
                oldAndNewIdentical = HELPER_OccupationId.compare (_OccupationId, newOccupationId);
            }

            

            if (FIELD_OccupationId_Validators.length > 0)
            {
                Object newOccupationIdObj = HELPER_OccupationId.toObject (newOccupationId);

                if (newOccupationIdObj != null)
                {
                    int     loopMax = FIELD_OccupationId_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_OccupationId);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_OccupationId () != FieldWriteability.FALSE, "Field  OccupationId is not writeable");
            preOccupationIdChange (newOccupationId);
            markFieldChange (FIELD_OccupationId);
            _OccupationId = newOccupationId;            
            postFieldChange (FIELD_OccupationId);
            postOccupationIdChange ();
        }
    }



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

        
        result.add("CultureTemplate");
        
        result.add("JobTemplate");
        
        result.add("AppStatusWorkFlow");
        
        result.add("Level");
        
        result.add("Client");
        
        result.add("JobOwner");
        
        result.add("CreatedBy");
        
        result.add("HiringTeam");
        
        result.add("Occupation");
        
        result.add("ShortenedURL");
        
        result.add("AssessmentTemplate");
        

        return result;
    }
    
    
    public BaseBusinessClass getSingleAssocReferenceInstance (String assocName)
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_CultureTemplate))
        {
            return _CultureTemplate.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_JobTemplate))
        {
            return _JobTemplate.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            return _AppStatusWorkFlow.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            return _Level.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return _Client.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return _JobOwner.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return _CreatedBy.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return _HiringTeam.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return _Occupation.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return _ShortenedURL.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return _AssessmentTemplate.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_Level))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return Client.MULTIPLEREFERENCE_Jobs ;
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            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_CultureTemplate))
        {
            return getCultureTemplate ();
        }else if (assocName.equals (SINGLEREFERENCE_JobTemplate))
        {
            return getJobTemplate ();
        }else if (assocName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            return getAppStatusWorkFlow ();
        }else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            return getLevel ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClient ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwner ();
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return getCreatedBy ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeam ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupation ();
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return getShortenedURL ();
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return getAssessmentTemplate ();
        }
        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_CultureTemplate))
        {
            return getCultureTemplate (getType);
        }else if (assocName.equals (SINGLEREFERENCE_JobTemplate))
        {
            return getJobTemplate (getType);
        }else if (assocName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            return getAppStatusWorkFlow (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            return getLevel (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClient (getType);
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwner (getType);
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return getCreatedBy (getType);
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeam (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupation (getType);
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return getShortenedURL (getType);
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return getAssessmentTemplate (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_CultureTemplate))
        {
            return getCultureTemplateID ();
        }else if (assocName.equals (SINGLEREFERENCE_JobTemplate))
        {
            return getJobTemplateID ();
        }else if (assocName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            return getAppStatusWorkFlowID ();
        }else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            return getLevelID ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClientID ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwnerID ();
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return getCreatedByID ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeamID ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupationID ();
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return getShortenedURLID ();
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return getAssessmentTemplateID ();
        }
        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_CultureTemplate))
        {
            setCultureTemplate ((CultureCriteriaTemplate)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_JobTemplate))
        {
            setJobTemplate ((Job)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            setAppStatusWorkFlow ((WorkFlow)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            setLevel ((Level)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            setClient ((Client)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            setJobOwner ((CompanyUser)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_CreatedBy))
        {
            setCreatedBy ((CompanyUser)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            setHiringTeam ((HiringTeam)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            setOccupation ((Occupation)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            setShortenedURL ((ShortenedURL)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            setAssessmentTemplate ((AssessmentCriteriaTemplate)(newValue));
        }
        else
        {
            super.setSingleAssoc (assocName, newValue);
        }
    }



    /**
     * Get the reference CultureTemplate
     */
    public CultureCriteriaTemplate getCultureTemplate () throws StorageException
    {
        assertValid();
        
        try
        {
            return (CultureCriteriaTemplate)(_CultureTemplate.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in Job:", this.getObjectID (), ", was trying to get CultureCriteriaTemplate:",  getCultureTemplateID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _CultureTemplate.get ().getClass ());
            throw e;
        }
    }


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCultureTemplateID ()
    {
        assertValid();
        
        if (_CultureTemplate == null)
        {
            return null;
        }
        else
        {
            return _CultureTemplate.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 preCultureTemplateChange (CultureCriteriaTemplate newCultureTemplate) 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 postCultureTemplateChange () throws FieldException
    {
    }



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

        if (_CultureTemplate.wouldReferencedChange (newCultureTemplate))
        {
            assertValid();
            Debug.assertion (getWriteability_CultureTemplate () != FieldWriteability.FALSE, "Assoc CultureTemplate is not writeable");
            preCultureTemplateChange (newCultureTemplate);
            
                    _CultureTemplate.set (newCultureTemplate);
                
            postCultureTemplateChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getJobTemplateID ()
    {
        assertValid();
        
        if (_JobTemplate == null)
        {
            return null;
        }
        else
        {
            return _JobTemplate.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 preJobTemplateChange (Job newJobTemplate) 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 postJobTemplateChange () throws FieldException
    {
    }



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

        if (_JobTemplate.wouldReferencedChange (newJobTemplate))
        {
            assertValid();
            Debug.assertion (getWriteability_JobTemplate () != FieldWriteability.FALSE, "Assoc JobTemplate is not writeable");
            preJobTemplateChange (newJobTemplate);
            
                    _JobTemplate.set (newJobTemplate);
                
            postJobTemplateChange ();
        }
    }

    /**
     * Get the reference AppStatusWorkFlow
     */
    public WorkFlow getAppStatusWorkFlow () throws StorageException
    {
        assertValid();
        
        try
        {
            return (WorkFlow)(_AppStatusWorkFlow.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in Job:", this.getObjectID (), ", was trying to get WorkFlow:",  getAppStatusWorkFlowID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _AppStatusWorkFlow.get ().getClass ());
            throw e;
        }
    }


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getAppStatusWorkFlowID ()
    {
        assertValid();
        
        if (_AppStatusWorkFlow == null)
        {
            return null;
        }
        else
        {
            return _AppStatusWorkFlow.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 preAppStatusWorkFlowChange (WorkFlow newAppStatusWorkFlow) 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 postAppStatusWorkFlowChange () throws FieldException
    {
    }



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

        if (_AppStatusWorkFlow.wouldReferencedChange (newAppStatusWorkFlow))
        {
            assertValid();
            Debug.assertion (getWriteability_AppStatusWorkFlow () != FieldWriteability.FALSE, "Assoc AppStatusWorkFlow is not writeable");
            preAppStatusWorkFlowChange (newAppStatusWorkFlow);
            
                    _AppStatusWorkFlow.set (newAppStatusWorkFlow);
                
            postAppStatusWorkFlowChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getLevelID ()
    {
        assertValid();
        
        if (_Level == null)
        {
            return null;
        }
        else
        {
            return _Level.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 preLevelChange (Level newLevel) 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 postLevelChange () throws FieldException
    {
    }



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

        if (_Level.wouldReferencedChange (newLevel))
        {
            assertValid();
            Debug.assertion (getWriteability_Level () != FieldWriteability.FALSE, "Assoc Level is not writeable");
            preLevelChange (newLevel);
            
                    _Level.set (newLevel);
                
            postLevelChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getClientID ()
    {
        assertValid();
        
        if (_Client == null)
        {
            return null;
        }
        else
        {
            return _Client.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 preClientChange (Client newClient) 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 postClientChange () throws FieldException
    {
    }



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

        if (_Client.wouldReferencedChange (newClient))
        {
            assertValid();
            Debug.assertion (getWriteability_Client () != FieldWriteability.FALSE, "Assoc Client is not writeable");
            preClientChange (newClient);
            Client oldClient = getClient ();

                    if (oldClient != null)
                    {
                        // This is to stop validation from triggering when we are removed
                        _Client.set (null);
                        oldClient.removeFromJobs ((Job)(this));
                    }

                    _Client.set (newClient);

                    if (newClient != null)
                    {
                        newClient.addToJobs ((Job)(this));
                    }
                
            postClientChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getJobOwnerID ()
    {
        assertValid();
        
        if (_JobOwner == null)
        {
            return null;
        }
        else
        {
            return _JobOwner.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 preJobOwnerChange (CompanyUser newJobOwner) 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 postJobOwnerChange () throws FieldException
    {
    }



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

        if (_JobOwner.wouldReferencedChange (newJobOwner))
        {
            assertValid();
            Debug.assertion (getWriteability_JobOwner () != FieldWriteability.FALSE, "Assoc JobOwner is not writeable");
            preJobOwnerChange (newJobOwner);
            
                    _JobOwner.set (newJobOwner);
                
            postJobOwnerChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCreatedByID ()
    {
        assertValid();
        
        if (_CreatedBy == null)
        {
            return null;
        }
        else
        {
            return _CreatedBy.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 preCreatedByChange (CompanyUser newCreatedBy) 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 postCreatedByChange () throws FieldException
    {
    }



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

        if (_CreatedBy.wouldReferencedChange (newCreatedBy))
        {
            assertValid();
            Debug.assertion (getWriteability_CreatedBy () != FieldWriteability.FALSE, "Assoc CreatedBy is not writeable");
            preCreatedByChange (newCreatedBy);
            
                    _CreatedBy.set (newCreatedBy);
                
            postCreatedByChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getHiringTeamID ()
    {
        assertValid();
        
        if (_HiringTeam == null)
        {
            return null;
        }
        else
        {
            return _HiringTeam.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 preHiringTeamChange (HiringTeam newHiringTeam) 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 postHiringTeamChange () throws FieldException
    {
    }



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

        if (_HiringTeam.wouldReferencedChange (newHiringTeam))
        {
            assertValid();
            Debug.assertion (getWriteability_HiringTeam () != FieldWriteability.FALSE, "Assoc HiringTeam is not writeable");
            preHiringTeamChange (newHiringTeam);
            
                    _HiringTeam.set (newHiringTeam);
                
            postHiringTeamChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getOccupationID ()
    {
        assertValid();
        
        if (_Occupation == null)
        {
            return null;
        }
        else
        {
            return _Occupation.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 preOccupationChange (Occupation newOccupation) 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 postOccupationChange () throws FieldException
    {
    }



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

        if (_Occupation.wouldReferencedChange (newOccupation))
        {
            assertValid();
            Debug.assertion (getWriteability_Occupation () != FieldWriteability.FALSE, "Assoc Occupation is not writeable");
            preOccupationChange (newOccupation);
            
                    _Occupation.set (newOccupation);
                
            postOccupationChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getShortenedURLID ()
    {
        assertValid();
        
        if (_ShortenedURL == null)
        {
            return null;
        }
        else
        {
            return _ShortenedURL.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 preShortenedURLChange (ShortenedURL newShortenedURL) 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 postShortenedURLChange () throws FieldException
    {
    }



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

        if (_ShortenedURL.wouldReferencedChange (newShortenedURL))
        {
            assertValid();
            Debug.assertion (getWriteability_ShortenedURL () != FieldWriteability.FALSE, "Assoc ShortenedURL is not writeable");
            preShortenedURLChange (newShortenedURL);
            
                    _ShortenedURL.set (newShortenedURL);
                
            postShortenedURLChange ();
        }
    }

    /**
     * Get the reference AssessmentTemplate
     */
    public AssessmentCriteriaTemplate getAssessmentTemplate () throws StorageException
    {
        assertValid();
        
        try
        {
            return (AssessmentCriteriaTemplate)(_AssessmentTemplate.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in Job:", this.getObjectID (), ", was trying to get AssessmentCriteriaTemplate:",  getAssessmentTemplateID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _AssessmentTemplate.get ().getClass ());
            throw e;
        }
    }


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getAssessmentTemplateID ()
    {
        assertValid();
        
        if (_AssessmentTemplate == null)
        {
            return null;
        }
        else
        {
            return _AssessmentTemplate.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 preAssessmentTemplateChange (AssessmentCriteriaTemplate newAssessmentTemplate) 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 postAssessmentTemplateChange () throws FieldException
    {
    }



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

        if (_AssessmentTemplate.wouldReferencedChange (newAssessmentTemplate))
        {
            assertValid();
            Debug.assertion (getWriteability_AssessmentTemplate () != FieldWriteability.FALSE, "Assoc AssessmentTemplate is not writeable");
            preAssessmentTemplateChange (newAssessmentTemplate);
            
                    _AssessmentTemplate.set (newAssessmentTemplate);
                
            postAssessmentTemplateChange ();
        }
    }

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

        
        result.add("JobApplications");
        
        result.add("AssessmentCriterias");
        
        result.add("CultureCriterias");
        
        result.add("WorkFlows");
        

        return result;
    }


    /**
     * Get the reference instance for the multi assoc name.
     */
    public BaseBusinessClass getMultiAssocReferenceInstance(String attribName)
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            return JobApplication.REFERENCE_JobApplication ;
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return AssessmentCriteria.REFERENCE_AssessmentCriteria ;
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            return CultureCriteria.REFERENCE_CultureCriteria ;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return WorkFlow.REFERENCE_WorkFlow ;
        }
        

        return super.getMultiAssocReferenceInstance(attribName);
    }


    public String getMultiAssocBackReference(String attribName)
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            return JobApplication.SINGLEREFERENCE_Job ;
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return AssessmentCriteria.SINGLEREFERENCE_Job ;
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            return CultureCriteria.SINGLEREFERENCE_Job ;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return WorkFlow.SINGLEREFERENCE_Job ;
        }
        

        return super.getMultiAssocBackReference(attribName);
    }


    /**
     * Get the assoc count for the multi assoc name.
     */
    public int getMultiAssocCount(String attribName) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            return this.getJobApplicationsCount();
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return this.getAssessmentCriteriasCount();
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            return this.getCultureCriteriasCount();
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return this.getWorkFlowsCount();
        }
        

        return super.getMultiAssocCount(attribName);
    }


    /**
     * Get the assoc at a particular index
     */
    public BaseBusinessClass getMultiAssocAt(String attribName, int index) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            return this.getJobApplicationsAt(index);
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return this.getAssessmentCriteriasAt(index);
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            return this.getCultureCriteriasAt(index);
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return this.getWorkFlowsAt(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_JobApplications.equals(attribName))
        {
            addToJobApplications((JobApplication)newElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            addToAssessmentCriterias((AssessmentCriteria)newElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            addToCultureCriterias((CultureCriteria)newElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            addToWorkFlows((WorkFlow)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_JobApplications.equals(attribName))
        {
            removeFromJobApplications((JobApplication)oldElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            removeFromAssessmentCriterias((AssessmentCriteria)oldElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            removeFromCultureCriterias((CultureCriteria)oldElement);

            return;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            removeFromWorkFlows((WorkFlow)oldElement);

            return;
        }
        

        super.removeFromMultiAssoc(attribName, oldElement);
    }


    protected void __loadMultiAssoc (String attribName, BaseBusinessClass[] elements)
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            _JobApplications.__loadAssociation (elements);
            return;
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            _AssessmentCriterias.__loadAssociation (elements);
            return;
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            _CultureCriterias.__loadAssociation (elements);
            return;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            _WorkFlows.__loadAssociation (elements);
            return;
        }
        

        super.__loadMultiAssoc(attribName, elements);
    }


    protected boolean __isMultiAssocLoaded (String attribName)
    {
        
        if (MULTIPLEREFERENCE_JobApplications.equals(attribName))
        {
            return _JobApplications.isLoaded ();
        }
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return _AssessmentCriterias.isLoaded ();
        }
        
        if (MULTIPLEREFERENCE_CultureCriterias.equals(attribName))
        {
            return _CultureCriterias.isLoaded ();
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return _WorkFlows.isLoaded ();
        }
        

        return super.__isMultiAssocLoaded(attribName);
    }

    

    public FieldWriteability getWriteability_JobApplications ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getJobApplicationsCount () throws StorageException
    {
        assertValid();
        return _JobApplications.getReferencedObjectsCount ();
    }


    public void addToJobApplications (JobApplication newElement) throws StorageException
    {
        if (_JobApplications.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_JobApplications () != FieldWriteability.FALSE, "MultiAssoc JobApplications is not writeable (add)");
            _JobApplications.appendElement (newElement);

            try
            {
                if (newElement.getJob () != this)
                {
                    newElement.setJob ((Job)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromJobApplications (JobApplication elementToRemove) throws StorageException
    {
        if (_JobApplications.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_JobApplications () != FieldWriteability.FALSE, "MultiAssoc JobApplications is not writeable (remove)");
            _JobApplications.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getJob () != null)
                {
                    elementToRemove.setJob (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public JobApplication getJobApplicationsAt (int index) throws StorageException
    {
        return (JobApplication)(_JobApplications.getElementAt (index));
    }


    public SortedSet<JobApplication> getJobApplicationsSet () throws StorageException
    {
        return _JobApplications.getSet ();
    }

    public FieldWriteability getWriteability_AssessmentCriterias ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getAssessmentCriteriasCount () throws StorageException
    {
        assertValid();
        return _AssessmentCriterias.getReferencedObjectsCount ();
    }


    public void addToAssessmentCriterias (AssessmentCriteria newElement) throws StorageException
    {
        if (_AssessmentCriterias.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_AssessmentCriterias () != FieldWriteability.FALSE, "MultiAssoc AssessmentCriterias is not writeable (add)");
            _AssessmentCriterias.appendElement (newElement);

            try
            {
                if (newElement.getJob () != this)
                {
                    newElement.setJob ((Job)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromAssessmentCriterias (AssessmentCriteria elementToRemove) throws StorageException
    {
        if (_AssessmentCriterias.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_AssessmentCriterias () != FieldWriteability.FALSE, "MultiAssoc AssessmentCriterias is not writeable (remove)");
            _AssessmentCriterias.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getJob () != null)
                {
                    elementToRemove.setJob (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public AssessmentCriteria getAssessmentCriteriasAt (int index) throws StorageException
    {
        return (AssessmentCriteria)(_AssessmentCriterias.getElementAt (index));
    }


    public SortedSet<AssessmentCriteria> getAssessmentCriteriasSet () throws StorageException
    {
        return _AssessmentCriterias.getSet ();
    }

    public FieldWriteability getWriteability_CultureCriterias ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getCultureCriteriasCount () throws StorageException
    {
        assertValid();
        return _CultureCriterias.getReferencedObjectsCount ();
    }


    public void addToCultureCriterias (CultureCriteria newElement) throws StorageException
    {
        if (_CultureCriterias.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_CultureCriterias () != FieldWriteability.FALSE, "MultiAssoc CultureCriterias is not writeable (add)");
            _CultureCriterias.appendElement (newElement);

            try
            {
                if (newElement.getJob () != this)
                {
                    newElement.setJob ((Job)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromCultureCriterias (CultureCriteria elementToRemove) throws StorageException
    {
        if (_CultureCriterias.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_CultureCriterias () != FieldWriteability.FALSE, "MultiAssoc CultureCriterias is not writeable (remove)");
            _CultureCriterias.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getJob () != null)
                {
                    elementToRemove.setJob (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public CultureCriteria getCultureCriteriasAt (int index) throws StorageException
    {
        return (CultureCriteria)(_CultureCriterias.getElementAt (index));
    }


    public SortedSet<CultureCriteria> getCultureCriteriasSet () throws StorageException
    {
        return _CultureCriterias.getSet ();
    }

    public FieldWriteability getWriteability_WorkFlows ()
    {
        return getFieldWritabilityUtil (FieldWriteability.TRUE);
    }
    
    
    public int getWorkFlowsCount () throws StorageException
    {
        assertValid();
        return _WorkFlows.getReferencedObjectsCount ();
    }


    public void addToWorkFlows (WorkFlow newElement) throws StorageException
    {
        if (_WorkFlows.wouldAddChange (newElement))
        {
            assertValid();
            Debug.assertion (getWriteability_WorkFlows () != FieldWriteability.FALSE, "MultiAssoc WorkFlows is not writeable (add)");
            _WorkFlows.appendElement (newElement);

            try
            {
                if (newElement.getJob () != this)
                {
                    newElement.setJob ((Job)(this));
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public void removeFromWorkFlows (WorkFlow elementToRemove) throws StorageException
    {
        if (_WorkFlows.wouldRemoveChange (elementToRemove))
        {
            assertValid();
            Debug.assertion (getWriteability_WorkFlows () != FieldWriteability.FALSE, "MultiAssoc WorkFlows is not writeable (remove)");
            _WorkFlows.removeElement (elementToRemove);
            try
            {
                if (elementToRemove.getJob () != null)
                {
                    elementToRemove.setJob (null);
                }
            }
            catch (Exception e)
            {
                throw NestedException.wrap(e);
            }
        }
    }


    public WorkFlow getWorkFlowsAt (int index) throws StorageException
    {
        return (WorkFlow)(_WorkFlows.getElementAt (index));
    }


    public SortedSet<WorkFlow> getWorkFlowsSet () throws StorageException
    {
        return _WorkFlows.getSet ();
    }



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

                if (referenced != null)
                {
                    // Stop the callback
                    LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Jobs from ", getObjectID (), " to ", referenced.getObjectID ());
                    _Client.set (null);
                    referenced.removeFromJobs ((Job)this);
                }
            }
        
            for(JobApplication referenced : CollectionUtils.reverse(getJobApplicationsSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Job from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setJob(null);
            }

            for(AssessmentCriteria referenced : CollectionUtils.reverse(getAssessmentCriteriasSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Job from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setJob(null);
            }

            for(CultureCriteria referenced : CollectionUtils.reverse(getCultureCriteriasSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Job from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setJob(null);
            }

            for(WorkFlow referenced : CollectionUtils.reverse(getWorkFlowsSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Job from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setJob(null);
            }

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

        super.onDelete ();
    }


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


    public Job referenceInstance ()
    {
        return REFERENCE_Job;
    }


    public Job getInTransaction (ObjectTransaction t) throws StorageException
    {
        return getJobByID (t, getObjectID());
    }
    
    
    public BaseBusinessClass dummyInstance ()
    {
        return DUMMY_Job;
    }


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





    /**
     * 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_jobPSet = allSets.getPersistentSet (myID, "tl_job", myPSetStatus);

        tl_jobPSet.setAttrib (FIELD_ObjectID, myID);
        tl_jobPSet.setAttrib (FIELD_JobTitle, HELPER_JobTitle.toObject (_JobTitle)); //
        tl_jobPSet.setAttrib (FIELD_JobDescription, HELPER_JobDescription.toObject (_JobDescription)); //
        tl_jobPSet.setAttrib (FIELD_JobStatus, HELPER_JobStatus.toObject (_JobStatus)); //
        tl_jobPSet.setAttrib (FIELD_OpenDate, HELPER_OpenDate.toObject (_OpenDate)); //
        tl_jobPSet.setAttrib (FIELD_ApplyBy, HELPER_ApplyBy.toObject (_ApplyBy)); //
        tl_jobPSet.setAttrib (FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject (_IncludeAssessmentCriteria)); //
        tl_jobPSet.setAttrib (FIELD_AssessmentType, HELPER_AssessmentType.toObject (_AssessmentType)); //
        tl_jobPSet.setAttrib (FIELD_RandomKey, HELPER_RandomKey.toObject (_RandomKey)); //
        tl_jobPSet.setAttrib (FIELD_JobType, HELPER_JobType.toObject (_JobType)); //
        tl_jobPSet.setAttrib (FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject (_ReferenceNumber)); //
        tl_jobPSet.setAttrib (FIELD_LastStatusChangeDate, HELPER_LastStatusChangeDate.toObject (_LastStatusChangeDate)); //
        tl_jobPSet.setAttrib (FIELD_Remote, HELPER_Remote.toObject (_Remote)); //
        tl_jobPSet.setAttrib (FIELD_City, HELPER_City.toObject (_City)); //
        tl_jobPSet.setAttrib (FIELD_PostCode, HELPER_PostCode.toObject (_PostCode)); //
        tl_jobPSet.setAttrib (FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject (_ExpectedCandidateRadius)); //
        tl_jobPSet.setAttrib (FIELD_State, HELPER_State.toObject (_State)); //
        tl_jobPSet.setAttrib (FIELD_Country, HELPER_Country.toObject (_Country)); //
        tl_jobPSet.setAttrib (FIELD_RequireCV, HELPER_RequireCV.toObject (_RequireCV)); //
        tl_jobPSet.setAttrib (FIELD_IsManuallyClosed, HELPER_IsManuallyClosed.toObject (_IsManuallyClosed)); //
        tl_jobPSet.setAttrib (FIELD_LastEdited, HELPER_LastEdited.toObject (_LastEdited)); //
        tl_jobPSet.setAttrib (FIELD_IsPPJ, HELPER_IsPPJ.toObject (_IsPPJ)); //
        tl_jobPSet.setAttrib (FIELD_Industry, HELPER_Industry.toObject (_Industry)); //
        tl_jobPSet.setAttrib (FIELD_CultureStatement, HELPER_CultureStatement.toObject (_CultureStatement)); //
        tl_jobPSet.setAttrib (FIELD_DraftLocation, HELPER_DraftLocation.toObject (_DraftLocation)); //
        tl_jobPSet.setAttrib (FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject (_GoogleAddressText)); //
        _Level.getPersistentSets (allSets);
        _Client.getPersistentSets (allSets);
        _JobOwner.getPersistentSets (allSets);
        _CreatedBy.getPersistentSets (allSets);
        _HiringTeam.getPersistentSets (allSets);
        _Occupation.getPersistentSets (allSets);
        _ShortenedURL.getPersistentSets (allSets);
        _AssessmentTemplate.getPersistentSets (allSets);
        
    }


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

        
        PersistentSet   tl_jobPSet = allSets.getPersistentSet (objectID, "tl_job");

        _JobTitle = (String)(HELPER_JobTitle.fromObject (_JobTitle, tl_jobPSet.getAttrib (FIELD_JobTitle))); //
        _JobDescription = (String)(HELPER_JobDescription.fromObject (_JobDescription, tl_jobPSet.getAttrib (FIELD_JobDescription))); //
        _JobStatus = (JobStatus)(HELPER_JobStatus.fromObject (_JobStatus, tl_jobPSet.getAttrib (FIELD_JobStatus))); //
        _OpenDate = (Date)(HELPER_OpenDate.fromObject (_OpenDate, tl_jobPSet.getAttrib (FIELD_OpenDate))); //
        _ApplyBy = (Date)(HELPER_ApplyBy.fromObject (_ApplyBy, tl_jobPSet.getAttrib (FIELD_ApplyBy))); //
        _IncludeAssessmentCriteria = (Boolean)(HELPER_IncludeAssessmentCriteria.fromObject (_IncludeAssessmentCriteria, tl_jobPSet.getAttrib (FIELD_IncludeAssessmentCriteria))); //
        _AssessmentType = (AssessmentType)(HELPER_AssessmentType.fromObject (_AssessmentType, tl_jobPSet.getAttrib (FIELD_AssessmentType))); //
        _RandomKey = (String)(HELPER_RandomKey.fromObject (_RandomKey, tl_jobPSet.getAttrib (FIELD_RandomKey))); //
        _JobType = (JobType)(HELPER_JobType.fromObject (_JobType, tl_jobPSet.getAttrib (FIELD_JobType))); //
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.fromObject (_ReferenceNumber, tl_jobPSet.getAttrib (FIELD_ReferenceNumber))); //
        _LastStatusChangeDate = (Date)(HELPER_LastStatusChangeDate.fromObject (_LastStatusChangeDate, tl_jobPSet.getAttrib (FIELD_LastStatusChangeDate))); //
        _Remote = (Boolean)(HELPER_Remote.fromObject (_Remote, tl_jobPSet.getAttrib (FIELD_Remote))); //
        _City = (String)(HELPER_City.fromObject (_City, tl_jobPSet.getAttrib (FIELD_City))); //
        _PostCode = (String)(HELPER_PostCode.fromObject (_PostCode, tl_jobPSet.getAttrib (FIELD_PostCode))); //
        _ExpectedCandidateRadius = (LocationRadius)(HELPER_ExpectedCandidateRadius.fromObject (_ExpectedCandidateRadius, tl_jobPSet.getAttrib (FIELD_ExpectedCandidateRadius))); //
        _State = (State)(HELPER_State.fromObject (_State, tl_jobPSet.getAttrib (FIELD_State))); //
        _Country = (Countries)(HELPER_Country.fromObject (_Country, tl_jobPSet.getAttrib (FIELD_Country))); //
        _RequireCV = (Boolean)(HELPER_RequireCV.fromObject (_RequireCV, tl_jobPSet.getAttrib (FIELD_RequireCV))); //
        _IsManuallyClosed = (Boolean)(HELPER_IsManuallyClosed.fromObject (_IsManuallyClosed, tl_jobPSet.getAttrib (FIELD_IsManuallyClosed))); //
        _LastEdited = (Date)(HELPER_LastEdited.fromObject (_LastEdited, tl_jobPSet.getAttrib (FIELD_LastEdited))); //
        _IsPPJ = (Boolean)(HELPER_IsPPJ.fromObject (_IsPPJ, tl_jobPSet.getAttrib (FIELD_IsPPJ))); //
        _Industry = (Industry)(HELPER_Industry.fromObject (_Industry, tl_jobPSet.getAttrib (FIELD_Industry))); //
        _CultureStatement = (String)(HELPER_CultureStatement.fromObject (_CultureStatement, tl_jobPSet.getAttrib (FIELD_CultureStatement))); //
        _DraftLocation = (DraftLocation)(HELPER_DraftLocation.fromObject (_DraftLocation, tl_jobPSet.getAttrib (FIELD_DraftLocation))); //
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.fromObject (_GoogleAddressText, tl_jobPSet.getAttrib (FIELD_GoogleAddressText))); //
        _Level.setFromPersistentSets (objectID, allSets);
        _Client.setFromPersistentSets (objectID, allSets);
        _JobOwner.setFromPersistentSets (objectID, allSets);
        _CreatedBy.setFromPersistentSets (objectID, allSets);
        _HiringTeam.setFromPersistentSets (objectID, allSets);
        _Occupation.setFromPersistentSets (objectID, allSets);
        _ShortenedURL.setFromPersistentSets (objectID, allSets);
        _AssessmentTemplate.setFromPersistentSets (objectID, allSets);
        
    }





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

        if (other instanceof Job)
        {
            Job otherJob = (Job)other;
            
            try
            {
                setJobTitle (otherJob.getJobTitle ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobDescription (otherJob.getJobDescription ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobStatus (otherJob.getJobStatus ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setOpenDate (otherJob.getOpenDate ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setApplyBy (otherJob.getApplyBy ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIncludeAssessmentCriteria (otherJob.getIncludeAssessmentCriteria ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setAssessmentType (otherJob.getAssessmentType ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setRandomKey (otherJob.getRandomKey ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobType (otherJob.getJobType ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setReferenceNumber (otherJob.getReferenceNumber ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setLastStatusChangeDate (otherJob.getLastStatusChangeDate ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setRemote (otherJob.getRemote ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCity (otherJob.getCity ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setPostCode (otherJob.getPostCode ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setExpectedCandidateRadius (otherJob.getExpectedCandidateRadius ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setState (otherJob.getState ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCountry (otherJob.getCountry ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setRequireCV (otherJob.getRequireCV ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIsManuallyClosed (otherJob.getIsManuallyClosed ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setLastEdited (otherJob.getLastEdited ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIsPPJ (otherJob.getIsPPJ ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIndustry (otherJob.getIndustry ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setCultureStatement (otherJob.getCultureStatement ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setDraftLocation (otherJob.getDraftLocation ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setGoogleAddressText (otherJob.getGoogleAddressText ());
            }
            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 BaseJob)
        {
            BaseJob sourceJob = (BaseJob)(source);

            _JobTitle = sourceJob._JobTitle;
            _JobDescription = sourceJob._JobDescription;
            _JobStatus = sourceJob._JobStatus;
            _OpenDate = sourceJob._OpenDate;
            _ApplyBy = sourceJob._ApplyBy;
            _IncludeAssessmentCriteria = sourceJob._IncludeAssessmentCriteria;
            _AssessmentType = sourceJob._AssessmentType;
            _RandomKey = sourceJob._RandomKey;
            _JobType = sourceJob._JobType;
            _ReferenceNumber = sourceJob._ReferenceNumber;
            _LastStatusChangeDate = sourceJob._LastStatusChangeDate;
            _Remote = sourceJob._Remote;
            _City = sourceJob._City;
            _PostCode = sourceJob._PostCode;
            _ExpectedCandidateRadius = sourceJob._ExpectedCandidateRadius;
            _State = sourceJob._State;
            _Country = sourceJob._Country;
            _RequireCV = sourceJob._RequireCV;
            _IsManuallyClosed = sourceJob._IsManuallyClosed;
            _LastEdited = sourceJob._LastEdited;
            _IsPPJ = sourceJob._IsPPJ;
            _Industry = sourceJob._Industry;
            _CultureStatement = sourceJob._CultureStatement;
            _DraftLocation = sourceJob._DraftLocation;
            _GoogleAddressText = sourceJob._GoogleAddressText;
            _Email = sourceJob._Email;
            _Password = sourceJob._Password;
            _ConfirmPassword = sourceJob._ConfirmPassword;
            _CompletedDetails = sourceJob._CompletedDetails;
            _CompletedRequirements = sourceJob._CompletedRequirements;
            _CompletedCulture = sourceJob._CompletedCulture;
            _CompletedAssessmentType = sourceJob._CompletedAssessmentType;
            _SaveAssessmentTemplate = sourceJob._SaveAssessmentTemplate;
            _SaveCultureTemplate = sourceJob._SaveCultureTemplate;
            _FromTemplate = sourceJob._FromTemplate;
            _AssessmentTemplateName = sourceJob._AssessmentTemplateName;
            _CultureTemplateName = sourceJob._CultureTemplateName;
            _AppProcessOption = sourceJob._AppProcessOption;
            _RankingCompleted = sourceJob._RankingCompleted;
            _OccupationId = sourceJob._OccupationId;
            
        }
    }


    /**
     * 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 BaseJob)
        {
            BaseJob sourceJob = (BaseJob)(source);

            _CultureTemplate.copyFrom (sourceJob._CultureTemplate, linkToGhosts);
            _JobTemplate.copyFrom (sourceJob._JobTemplate, linkToGhosts);
            _AppStatusWorkFlow.copyFrom (sourceJob._AppStatusWorkFlow, linkToGhosts);
            _Level.copyFrom (sourceJob._Level, linkToGhosts);
            _Client.copyFrom (sourceJob._Client, linkToGhosts);
            _JobOwner.copyFrom (sourceJob._JobOwner, linkToGhosts);
            _CreatedBy.copyFrom (sourceJob._CreatedBy, linkToGhosts);
            _HiringTeam.copyFrom (sourceJob._HiringTeam, linkToGhosts);
            _Occupation.copyFrom (sourceJob._Occupation, linkToGhosts);
            _ShortenedURL.copyFrom (sourceJob._ShortenedURL, linkToGhosts);
            _AssessmentTemplate.copyFrom (sourceJob._AssessmentTemplate, 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 BaseJob)
        {
            BaseJob sourceJob = (BaseJob)(source);

            _JobApplications.copyFrom (sourceJob._JobApplications, linkToGhosts);
            _AssessmentCriterias.copyFrom (sourceJob._AssessmentCriterias, linkToGhosts);
            _CultureCriterias.copyFrom (sourceJob._CultureCriterias, linkToGhosts);
            _WorkFlows.copyFrom (sourceJob._WorkFlows, linkToGhosts);
            
        }
    }


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

        
        context.check (getOccupationID() != null, this, SINGLEREFERENCE_Occupation, "mandatory");
        
    }


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

        _JobTitle = (String)(HELPER_JobTitle.readExternal (_JobTitle, vals.get(FIELD_JobTitle))); //
        _JobDescription = (String)(HELPER_JobDescription.readExternal (_JobDescription, vals.get(FIELD_JobDescription))); //
        _JobStatus = (JobStatus)(HELPER_JobStatus.readExternal (_JobStatus, vals.get(FIELD_JobStatus))); //
        _OpenDate = (Date)(HELPER_OpenDate.readExternal (_OpenDate, vals.get(FIELD_OpenDate))); //
        _ApplyBy = (Date)(HELPER_ApplyBy.readExternal (_ApplyBy, vals.get(FIELD_ApplyBy))); //
        _IncludeAssessmentCriteria = (Boolean)(HELPER_IncludeAssessmentCriteria.readExternal (_IncludeAssessmentCriteria, vals.get(FIELD_IncludeAssessmentCriteria))); //
        _AssessmentType = (AssessmentType)(HELPER_AssessmentType.readExternal (_AssessmentType, vals.get(FIELD_AssessmentType))); //
        _RandomKey = (String)(HELPER_RandomKey.readExternal (_RandomKey, vals.get(FIELD_RandomKey))); //
        _JobType = (JobType)(HELPER_JobType.readExternal (_JobType, vals.get(FIELD_JobType))); //
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.readExternal (_ReferenceNumber, vals.get(FIELD_ReferenceNumber))); //
        _LastStatusChangeDate = (Date)(HELPER_LastStatusChangeDate.readExternal (_LastStatusChangeDate, vals.get(FIELD_LastStatusChangeDate))); //
        _Remote = (Boolean)(HELPER_Remote.readExternal (_Remote, vals.get(FIELD_Remote))); //
        _City = (String)(HELPER_City.readExternal (_City, vals.get(FIELD_City))); //
        _PostCode = (String)(HELPER_PostCode.readExternal (_PostCode, vals.get(FIELD_PostCode))); //
        _ExpectedCandidateRadius = (LocationRadius)(HELPER_ExpectedCandidateRadius.readExternal (_ExpectedCandidateRadius, vals.get(FIELD_ExpectedCandidateRadius))); //
        _State = (State)(HELPER_State.readExternal (_State, vals.get(FIELD_State))); //
        _Country = (Countries)(HELPER_Country.readExternal (_Country, vals.get(FIELD_Country))); //
        _RequireCV = (Boolean)(HELPER_RequireCV.readExternal (_RequireCV, vals.get(FIELD_RequireCV))); //
        _IsManuallyClosed = (Boolean)(HELPER_IsManuallyClosed.readExternal (_IsManuallyClosed, vals.get(FIELD_IsManuallyClosed))); //
        _LastEdited = (Date)(HELPER_LastEdited.readExternal (_LastEdited, vals.get(FIELD_LastEdited))); //
        _IsPPJ = (Boolean)(HELPER_IsPPJ.readExternal (_IsPPJ, vals.get(FIELD_IsPPJ))); //
        _Industry = (Industry)(HELPER_Industry.readExternal (_Industry, vals.get(FIELD_Industry))); //
        _CultureStatement = (String)(HELPER_CultureStatement.readExternal (_CultureStatement, vals.get(FIELD_CultureStatement))); //
        _DraftLocation = (DraftLocation)(HELPER_DraftLocation.readExternal (_DraftLocation, vals.get(FIELD_DraftLocation))); //
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.readExternal (_GoogleAddressText, vals.get(FIELD_GoogleAddressText))); //
        _Email = (String)(HELPER_Email.readExternal (_Email, vals.get(FIELD_Email))); //
        _Password = (String)(HELPER_Password.readExternal (_Password, vals.get(FIELD_Password))); //
        _ConfirmPassword = (String)(HELPER_ConfirmPassword.readExternal (_ConfirmPassword, vals.get(FIELD_ConfirmPassword))); //
        _CompletedDetails = (Boolean)(HELPER_CompletedDetails.readExternal (_CompletedDetails, vals.get(FIELD_CompletedDetails))); //
        _CompletedRequirements = (Boolean)(HELPER_CompletedRequirements.readExternal (_CompletedRequirements, vals.get(FIELD_CompletedRequirements))); //
        _CompletedCulture = (Boolean)(HELPER_CompletedCulture.readExternal (_CompletedCulture, vals.get(FIELD_CompletedCulture))); //
        _CompletedAssessmentType = (Boolean)(HELPER_CompletedAssessmentType.readExternal (_CompletedAssessmentType, vals.get(FIELD_CompletedAssessmentType))); //
        _SaveAssessmentTemplate = (Boolean)(HELPER_SaveAssessmentTemplate.readExternal (_SaveAssessmentTemplate, vals.get(FIELD_SaveAssessmentTemplate))); //
        _SaveCultureTemplate = (Boolean)(HELPER_SaveCultureTemplate.readExternal (_SaveCultureTemplate, vals.get(FIELD_SaveCultureTemplate))); //
        _FromTemplate = (Boolean)(HELPER_FromTemplate.readExternal (_FromTemplate, vals.get(FIELD_FromTemplate))); //
        _AssessmentTemplateName = (String)(HELPER_AssessmentTemplateName.readExternal (_AssessmentTemplateName, vals.get(FIELD_AssessmentTemplateName))); //
        _CultureTemplateName = (String)(HELPER_CultureTemplateName.readExternal (_CultureTemplateName, vals.get(FIELD_CultureTemplateName))); //
        _AppProcessOption = (AppProcessOption)(HELPER_AppProcessOption.readExternal (_AppProcessOption, vals.get(FIELD_AppProcessOption))); //
        _RankingCompleted = (Boolean)(HELPER_RankingCompleted.readExternal (_RankingCompleted, vals.get(FIELD_RankingCompleted))); //
        _OccupationId = (String)(HELPER_OccupationId.readExternal (_OccupationId, vals.get(FIELD_OccupationId))); //
        _CultureTemplate.readExternalData(vals.get(SINGLEREFERENCE_CultureTemplate));
        _JobTemplate.readExternalData(vals.get(SINGLEREFERENCE_JobTemplate));
        _AppStatusWorkFlow.readExternalData(vals.get(SINGLEREFERENCE_AppStatusWorkFlow));
        _Level.readExternalData(vals.get(SINGLEREFERENCE_Level));
        _Client.readExternalData(vals.get(SINGLEREFERENCE_Client));
        _JobOwner.readExternalData(vals.get(SINGLEREFERENCE_JobOwner));
        _CreatedBy.readExternalData(vals.get(SINGLEREFERENCE_CreatedBy));
        _HiringTeam.readExternalData(vals.get(SINGLEREFERENCE_HiringTeam));
        _Occupation.readExternalData(vals.get(SINGLEREFERENCE_Occupation));
        _ShortenedURL.readExternalData(vals.get(SINGLEREFERENCE_ShortenedURL));
        _AssessmentTemplate.readExternalData(vals.get(SINGLEREFERENCE_AssessmentTemplate));
        _JobApplications.readExternalData(vals.get(MULTIPLEREFERENCE_JobApplications));
        _AssessmentCriterias.readExternalData(vals.get(MULTIPLEREFERENCE_AssessmentCriterias));
        _CultureCriterias.readExternalData(vals.get(MULTIPLEREFERENCE_CultureCriterias));
        _WorkFlows.readExternalData(vals.get(MULTIPLEREFERENCE_WorkFlows));
        
    }


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

        vals.put (FIELD_JobTitle, HELPER_JobTitle.writeExternal (_JobTitle));
        vals.put (FIELD_JobDescription, HELPER_JobDescription.writeExternal (_JobDescription));
        vals.put (FIELD_JobStatus, HELPER_JobStatus.writeExternal (_JobStatus));
        vals.put (FIELD_OpenDate, HELPER_OpenDate.writeExternal (_OpenDate));
        vals.put (FIELD_ApplyBy, HELPER_ApplyBy.writeExternal (_ApplyBy));
        vals.put (FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.writeExternal (_IncludeAssessmentCriteria));
        vals.put (FIELD_AssessmentType, HELPER_AssessmentType.writeExternal (_AssessmentType));
        vals.put (FIELD_RandomKey, HELPER_RandomKey.writeExternal (_RandomKey));
        vals.put (FIELD_JobType, HELPER_JobType.writeExternal (_JobType));
        vals.put (FIELD_ReferenceNumber, HELPER_ReferenceNumber.writeExternal (_ReferenceNumber));
        vals.put (FIELD_LastStatusChangeDate, HELPER_LastStatusChangeDate.writeExternal (_LastStatusChangeDate));
        vals.put (FIELD_Remote, HELPER_Remote.writeExternal (_Remote));
        vals.put (FIELD_City, HELPER_City.writeExternal (_City));
        vals.put (FIELD_PostCode, HELPER_PostCode.writeExternal (_PostCode));
        vals.put (FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.writeExternal (_ExpectedCandidateRadius));
        vals.put (FIELD_State, HELPER_State.writeExternal (_State));
        vals.put (FIELD_Country, HELPER_Country.writeExternal (_Country));
        vals.put (FIELD_RequireCV, HELPER_RequireCV.writeExternal (_RequireCV));
        vals.put (FIELD_IsManuallyClosed, HELPER_IsManuallyClosed.writeExternal (_IsManuallyClosed));
        vals.put (FIELD_LastEdited, HELPER_LastEdited.writeExternal (_LastEdited));
        vals.put (FIELD_IsPPJ, HELPER_IsPPJ.writeExternal (_IsPPJ));
        vals.put (FIELD_Industry, HELPER_Industry.writeExternal (_Industry));
        vals.put (FIELD_CultureStatement, HELPER_CultureStatement.writeExternal (_CultureStatement));
        vals.put (FIELD_DraftLocation, HELPER_DraftLocation.writeExternal (_DraftLocation));
        vals.put (FIELD_GoogleAddressText, HELPER_GoogleAddressText.writeExternal (_GoogleAddressText));
        vals.put (FIELD_Email, HELPER_Email.writeExternal (_Email));
        vals.put (FIELD_Password, HELPER_Password.writeExternal (_Password));
        vals.put (FIELD_ConfirmPassword, HELPER_ConfirmPassword.writeExternal (_ConfirmPassword));
        vals.put (FIELD_CompletedDetails, HELPER_CompletedDetails.writeExternal (_CompletedDetails));
        vals.put (FIELD_CompletedRequirements, HELPER_CompletedRequirements.writeExternal (_CompletedRequirements));
        vals.put (FIELD_CompletedCulture, HELPER_CompletedCulture.writeExternal (_CompletedCulture));
        vals.put (FIELD_CompletedAssessmentType, HELPER_CompletedAssessmentType.writeExternal (_CompletedAssessmentType));
        vals.put (FIELD_SaveAssessmentTemplate, HELPER_SaveAssessmentTemplate.writeExternal (_SaveAssessmentTemplate));
        vals.put (FIELD_SaveCultureTemplate, HELPER_SaveCultureTemplate.writeExternal (_SaveCultureTemplate));
        vals.put (FIELD_FromTemplate, HELPER_FromTemplate.writeExternal (_FromTemplate));
        vals.put (FIELD_AssessmentTemplateName, HELPER_AssessmentTemplateName.writeExternal (_AssessmentTemplateName));
        vals.put (FIELD_CultureTemplateName, HELPER_CultureTemplateName.writeExternal (_CultureTemplateName));
        vals.put (FIELD_AppProcessOption, HELPER_AppProcessOption.writeExternal (_AppProcessOption));
        vals.put (FIELD_RankingCompleted, HELPER_RankingCompleted.writeExternal (_RankingCompleted));
        vals.put (FIELD_OccupationId, HELPER_OccupationId.writeExternal (_OccupationId));
        vals.put (SINGLEREFERENCE_CultureTemplate, _CultureTemplate.writeExternalData());
        vals.put (SINGLEREFERENCE_JobTemplate, _JobTemplate.writeExternalData());
        vals.put (SINGLEREFERENCE_AppStatusWorkFlow, _AppStatusWorkFlow.writeExternalData());
        vals.put (SINGLEREFERENCE_Level, _Level.writeExternalData());
        vals.put (SINGLEREFERENCE_Client, _Client.writeExternalData());
        vals.put (SINGLEREFERENCE_JobOwner, _JobOwner.writeExternalData());
        vals.put (SINGLEREFERENCE_CreatedBy, _CreatedBy.writeExternalData());
        vals.put (SINGLEREFERENCE_HiringTeam, _HiringTeam.writeExternalData());
        vals.put (SINGLEREFERENCE_Occupation, _Occupation.writeExternalData());
        vals.put (SINGLEREFERENCE_ShortenedURL, _ShortenedURL.writeExternalData());
        vals.put (SINGLEREFERENCE_AssessmentTemplate, _AssessmentTemplate.writeExternalData());
        vals.put (MULTIPLEREFERENCE_JobApplications, _JobApplications.writeExternalData());
        vals.put (MULTIPLEREFERENCE_AssessmentCriterias, _AssessmentCriterias.writeExternalData());
        vals.put (MULTIPLEREFERENCE_CultureCriterias, _CultureCriterias.writeExternalData());
        vals.put (MULTIPLEREFERENCE_WorkFlows, _WorkFlows.writeExternalData());
        
    }


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

        if (other instanceof BaseJob)
        {
            BaseJob otherJob = (BaseJob)(other);

            
            if (!HELPER_JobTitle.compare(this._JobTitle, otherJob._JobTitle))
            {
                listener.notifyFieldChange(this, other, FIELD_JobTitle, HELPER_JobTitle.toObject(this._JobTitle), HELPER_JobTitle.toObject(otherJob._JobTitle));
            }
            if (!HELPER_JobDescription.compare(this._JobDescription, otherJob._JobDescription))
            {
                listener.notifyFieldChange(this, other, FIELD_JobDescription, HELPER_JobDescription.toObject(this._JobDescription), HELPER_JobDescription.toObject(otherJob._JobDescription));
            }
            if (!HELPER_JobStatus.compare(this._JobStatus, otherJob._JobStatus))
            {
                listener.notifyFieldChange(this, other, FIELD_JobStatus, HELPER_JobStatus.toObject(this._JobStatus), HELPER_JobStatus.toObject(otherJob._JobStatus));
            }
            if (!HELPER_OpenDate.compare(this._OpenDate, otherJob._OpenDate))
            {
                listener.notifyFieldChange(this, other, FIELD_OpenDate, HELPER_OpenDate.toObject(this._OpenDate), HELPER_OpenDate.toObject(otherJob._OpenDate));
            }
            if (!HELPER_ApplyBy.compare(this._ApplyBy, otherJob._ApplyBy))
            {
                listener.notifyFieldChange(this, other, FIELD_ApplyBy, HELPER_ApplyBy.toObject(this._ApplyBy), HELPER_ApplyBy.toObject(otherJob._ApplyBy));
            }
            if (!HELPER_IncludeAssessmentCriteria.compare(this._IncludeAssessmentCriteria, otherJob._IncludeAssessmentCriteria))
            {
                listener.notifyFieldChange(this, other, FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject(this._IncludeAssessmentCriteria), HELPER_IncludeAssessmentCriteria.toObject(otherJob._IncludeAssessmentCriteria));
            }
            if (!HELPER_AssessmentType.compare(this._AssessmentType, otherJob._AssessmentType))
            {
                listener.notifyFieldChange(this, other, FIELD_AssessmentType, HELPER_AssessmentType.toObject(this._AssessmentType), HELPER_AssessmentType.toObject(otherJob._AssessmentType));
            }
            if (!HELPER_RandomKey.compare(this._RandomKey, otherJob._RandomKey))
            {
                listener.notifyFieldChange(this, other, FIELD_RandomKey, HELPER_RandomKey.toObject(this._RandomKey), HELPER_RandomKey.toObject(otherJob._RandomKey));
            }
            if (!HELPER_JobType.compare(this._JobType, otherJob._JobType))
            {
                listener.notifyFieldChange(this, other, FIELD_JobType, HELPER_JobType.toObject(this._JobType), HELPER_JobType.toObject(otherJob._JobType));
            }
            if (!HELPER_ReferenceNumber.compare(this._ReferenceNumber, otherJob._ReferenceNumber))
            {
                listener.notifyFieldChange(this, other, FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject(this._ReferenceNumber), HELPER_ReferenceNumber.toObject(otherJob._ReferenceNumber));
            }
            if (!HELPER_LastStatusChangeDate.compare(this._LastStatusChangeDate, otherJob._LastStatusChangeDate))
            {
                listener.notifyFieldChange(this, other, FIELD_LastStatusChangeDate, HELPER_LastStatusChangeDate.toObject(this._LastStatusChangeDate), HELPER_LastStatusChangeDate.toObject(otherJob._LastStatusChangeDate));
            }
            if (!HELPER_Remote.compare(this._Remote, otherJob._Remote))
            {
                listener.notifyFieldChange(this, other, FIELD_Remote, HELPER_Remote.toObject(this._Remote), HELPER_Remote.toObject(otherJob._Remote));
            }
            if (!HELPER_City.compare(this._City, otherJob._City))
            {
                listener.notifyFieldChange(this, other, FIELD_City, HELPER_City.toObject(this._City), HELPER_City.toObject(otherJob._City));
            }
            if (!HELPER_PostCode.compare(this._PostCode, otherJob._PostCode))
            {
                listener.notifyFieldChange(this, other, FIELD_PostCode, HELPER_PostCode.toObject(this._PostCode), HELPER_PostCode.toObject(otherJob._PostCode));
            }
            if (!HELPER_ExpectedCandidateRadius.compare(this._ExpectedCandidateRadius, otherJob._ExpectedCandidateRadius))
            {
                listener.notifyFieldChange(this, other, FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject(this._ExpectedCandidateRadius), HELPER_ExpectedCandidateRadius.toObject(otherJob._ExpectedCandidateRadius));
            }
            if (!HELPER_State.compare(this._State, otherJob._State))
            {
                listener.notifyFieldChange(this, other, FIELD_State, HELPER_State.toObject(this._State), HELPER_State.toObject(otherJob._State));
            }
            if (!HELPER_Country.compare(this._Country, otherJob._Country))
            {
                listener.notifyFieldChange(this, other, FIELD_Country, HELPER_Country.toObject(this._Country), HELPER_Country.toObject(otherJob._Country));
            }
            if (!HELPER_RequireCV.compare(this._RequireCV, otherJob._RequireCV))
            {
                listener.notifyFieldChange(this, other, FIELD_RequireCV, HELPER_RequireCV.toObject(this._RequireCV), HELPER_RequireCV.toObject(otherJob._RequireCV));
            }
            if (!HELPER_IsManuallyClosed.compare(this._IsManuallyClosed, otherJob._IsManuallyClosed))
            {
                listener.notifyFieldChange(this, other, FIELD_IsManuallyClosed, HELPER_IsManuallyClosed.toObject(this._IsManuallyClosed), HELPER_IsManuallyClosed.toObject(otherJob._IsManuallyClosed));
            }
            if (!HELPER_LastEdited.compare(this._LastEdited, otherJob._LastEdited))
            {
                listener.notifyFieldChange(this, other, FIELD_LastEdited, HELPER_LastEdited.toObject(this._LastEdited), HELPER_LastEdited.toObject(otherJob._LastEdited));
            }
            if (!HELPER_IsPPJ.compare(this._IsPPJ, otherJob._IsPPJ))
            {
                listener.notifyFieldChange(this, other, FIELD_IsPPJ, HELPER_IsPPJ.toObject(this._IsPPJ), HELPER_IsPPJ.toObject(otherJob._IsPPJ));
            }
            if (!HELPER_Industry.compare(this._Industry, otherJob._Industry))
            {
                listener.notifyFieldChange(this, other, FIELD_Industry, HELPER_Industry.toObject(this._Industry), HELPER_Industry.toObject(otherJob._Industry));
            }
            if (!HELPER_CultureStatement.compare(this._CultureStatement, otherJob._CultureStatement))
            {
                listener.notifyFieldChange(this, other, FIELD_CultureStatement, HELPER_CultureStatement.toObject(this._CultureStatement), HELPER_CultureStatement.toObject(otherJob._CultureStatement));
            }
            if (!HELPER_DraftLocation.compare(this._DraftLocation, otherJob._DraftLocation))
            {
                listener.notifyFieldChange(this, other, FIELD_DraftLocation, HELPER_DraftLocation.toObject(this._DraftLocation), HELPER_DraftLocation.toObject(otherJob._DraftLocation));
            }
            if (!HELPER_GoogleAddressText.compare(this._GoogleAddressText, otherJob._GoogleAddressText))
            {
                listener.notifyFieldChange(this, other, FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject(this._GoogleAddressText), HELPER_GoogleAddressText.toObject(otherJob._GoogleAddressText));
            }

            // Compare single assocs
            _CultureTemplate.compare (otherJob._CultureTemplate, listener);
            _JobTemplate.compare (otherJob._JobTemplate, listener);
            _AppStatusWorkFlow.compare (otherJob._AppStatusWorkFlow, listener);
            _Level.compare (otherJob._Level, listener);
            _Client.compare (otherJob._Client, listener);
            _JobOwner.compare (otherJob._JobOwner, listener);
            _CreatedBy.compare (otherJob._CreatedBy, listener);
            _HiringTeam.compare (otherJob._HiringTeam, listener);
            _Occupation.compare (otherJob._Occupation, listener);
            _ShortenedURL.compare (otherJob._ShortenedURL, listener);
            _AssessmentTemplate.compare (otherJob._AssessmentTemplate, listener);
            

            // Compare multiple assocs
            _JobApplications.compare (otherJob._JobApplications, listener);
            _AssessmentCriterias.compare (otherJob._AssessmentCriterias, listener);
            _CultureCriterias.compare (otherJob._CultureCriterias, listener);
            _WorkFlows.compare (otherJob._WorkFlows, listener);
            
        }
    }


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

        visitor.visitField(this, FIELD_Email, HELPER_Email.toObject(getEmail()));
        visitor.visitField(this, FIELD_Password, HELPER_Password.toObject(getPassword()));
        visitor.visitField(this, FIELD_ConfirmPassword, HELPER_ConfirmPassword.toObject(getConfirmPassword()));
        visitor.visitField(this, FIELD_CompletedDetails, HELPER_CompletedDetails.toObject(getCompletedDetails()));
        visitor.visitField(this, FIELD_CompletedRequirements, HELPER_CompletedRequirements.toObject(getCompletedRequirements()));
        visitor.visitField(this, FIELD_CompletedCulture, HELPER_CompletedCulture.toObject(getCompletedCulture()));
        visitor.visitField(this, FIELD_CompletedAssessmentType, HELPER_CompletedAssessmentType.toObject(getCompletedAssessmentType()));
        visitor.visitField(this, FIELD_SaveAssessmentTemplate, HELPER_SaveAssessmentTemplate.toObject(getSaveAssessmentTemplate()));
        visitor.visitField(this, FIELD_SaveCultureTemplate, HELPER_SaveCultureTemplate.toObject(getSaveCultureTemplate()));
        visitor.visitField(this, FIELD_FromTemplate, HELPER_FromTemplate.toObject(getFromTemplate()));
        visitor.visitField(this, FIELD_AssessmentTemplateName, HELPER_AssessmentTemplateName.toObject(getAssessmentTemplateName()));
        visitor.visitField(this, FIELD_CultureTemplateName, HELPER_CultureTemplateName.toObject(getCultureTemplateName()));
        visitor.visitField(this, FIELD_AppProcessOption, HELPER_AppProcessOption.toObject(getAppProcessOption()));
        visitor.visitField(this, FIELD_RankingCompleted, HELPER_RankingCompleted.toObject(getRankingCompleted()));
        visitor.visitField(this, FIELD_OccupationId, HELPER_OccupationId.toObject(getOccupationId()));
        
    }


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

        visitor.visitField(this, FIELD_JobTitle, HELPER_JobTitle.toObject(getJobTitle()));
        visitor.visitField(this, FIELD_JobDescription, HELPER_JobDescription.toObject(getJobDescription()));
        visitor.visitField(this, FIELD_JobStatus, HELPER_JobStatus.toObject(getJobStatus()));
        visitor.visitField(this, FIELD_OpenDate, HELPER_OpenDate.toObject(getOpenDate()));
        visitor.visitField(this, FIELD_ApplyBy, HELPER_ApplyBy.toObject(getApplyBy()));
        visitor.visitField(this, FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject(getIncludeAssessmentCriteria()));
        visitor.visitField(this, FIELD_AssessmentType, HELPER_AssessmentType.toObject(getAssessmentType()));
        visitor.visitField(this, FIELD_RandomKey, HELPER_RandomKey.toObject(getRandomKey()));
        visitor.visitField(this, FIELD_JobType, HELPER_JobType.toObject(getJobType()));
        visitor.visitField(this, FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject(getReferenceNumber()));
        visitor.visitField(this, FIELD_LastStatusChangeDate, HELPER_LastStatusChangeDate.toObject(getLastStatusChangeDate()));
        visitor.visitField(this, FIELD_Remote, HELPER_Remote.toObject(getRemote()));
        visitor.visitField(this, FIELD_City, HELPER_City.toObject(getCity()));
        visitor.visitField(this, FIELD_PostCode, HELPER_PostCode.toObject(getPostCode()));
        visitor.visitField(this, FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject(getExpectedCandidateRadius()));
        visitor.visitField(this, FIELD_State, HELPER_State.toObject(getState()));
        visitor.visitField(this, FIELD_Country, HELPER_Country.toObject(getCountry()));
        visitor.visitField(this, FIELD_RequireCV, HELPER_RequireCV.toObject(getRequireCV()));
        visitor.visitField(this, FIELD_IsManuallyClosed, HELPER_IsManuallyClosed.toObject(getIsManuallyClosed()));
        visitor.visitField(this, FIELD_LastEdited, HELPER_LastEdited.toObject(getLastEdited()));
        visitor.visitField(this, FIELD_IsPPJ, HELPER_IsPPJ.toObject(getIsPPJ()));
        visitor.visitField(this, FIELD_Industry, HELPER_Industry.toObject(getIndustry()));
        visitor.visitField(this, FIELD_CultureStatement, HELPER_CultureStatement.toObject(getCultureStatement()));
        visitor.visitField(this, FIELD_DraftLocation, HELPER_DraftLocation.toObject(getDraftLocation()));
        visitor.visitField(this, FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject(getGoogleAddressText()));
        visitor.visitAssociation (_CultureTemplate);
        visitor.visitAssociation (_JobTemplate);
        visitor.visitAssociation (_AppStatusWorkFlow);
        visitor.visitAssociation (_Level);
        visitor.visitAssociation (_Client);
        visitor.visitAssociation (_JobOwner);
        visitor.visitAssociation (_CreatedBy);
        visitor.visitAssociation (_HiringTeam);
        visitor.visitAssociation (_Occupation);
        visitor.visitAssociation (_ShortenedURL);
        visitor.visitAssociation (_AssessmentTemplate);
        visitor.visitAssociation (_JobApplications);
        visitor.visitAssociation (_AssessmentCriterias);
        visitor.visitAssociation (_CultureCriterias);
        visitor.visitAssociation (_WorkFlows);
        
    }


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

        if (scope.includes (_CultureTemplate))
        {
            visitor.visit (_CultureTemplate);
        }
        if (scope.includes (_JobTemplate))
        {
            visitor.visit (_JobTemplate);
        }
        if (scope.includes (_AppStatusWorkFlow))
        {
            visitor.visit (_AppStatusWorkFlow);
        }
        if (scope.includes (_Level))
        {
            visitor.visit (_Level);
        }
        if (scope.includes (_Client))
        {
            visitor.visit (_Client);
        }
        if (scope.includes (_JobOwner))
        {
            visitor.visit (_JobOwner);
        }
        if (scope.includes (_CreatedBy))
        {
            visitor.visit (_CreatedBy);
        }
        if (scope.includes (_HiringTeam))
        {
            visitor.visit (_HiringTeam);
        }
        if (scope.includes (_Occupation))
        {
            visitor.visit (_Occupation);
        }
        if (scope.includes (_ShortenedURL))
        {
            visitor.visit (_ShortenedURL);
        }
        if (scope.includes (_AssessmentTemplate))
        {
            visitor.visit (_AssessmentTemplate);
        }
        if (scope.includes (_JobApplications))
        {
            visitor.visit (_JobApplications);
        }
        if (scope.includes (_AssessmentCriterias))
        {
            visitor.visit (_AssessmentCriterias);
        }
        if (scope.includes (_CultureCriterias))
        {
            visitor.visit (_CultureCriterias);
        }
        if (scope.includes (_WorkFlows))
        {
            visitor.visit (_WorkFlows);
        }
        
    }


    public static Job createJob (ObjectTransaction transaction) throws StorageException
    {
        Job     result = new Job ();

        result.initialiseNewObject (transaction);

        return result;
    }


    public static Job getJobByID (ObjectTransaction transaction, Long objectID) throws StorageException
    {
        return (Job)(transaction.getObjectByID (REFERENCE_Job, objectID));
    }

    public boolean testFilter (String attribName, QueryFilter filter) throws StorageException
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_JobTitle))
        {
            return filter.matches (getJobTitle ());
        }
        else if (attribName.equals (FIELD_JobDescription))
        {
            return filter.matches (getJobDescription ());
        }
        else if (attribName.equals (FIELD_JobStatus))
        {
            return filter.matches (getJobStatus ());
        }
        else if (attribName.equals (FIELD_OpenDate))
        {
            return filter.matches (getOpenDate ());
        }
        else if (attribName.equals (FIELD_ApplyBy))
        {
            return filter.matches (getApplyBy ());
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return filter.matches (getIncludeAssessmentCriteria ());
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return filter.matches (getAssessmentType ());
        }
        else if (attribName.equals (FIELD_RandomKey))
        {
            return filter.matches (getRandomKey ());
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return filter.matches (getJobType ());
        }
        else if (attribName.equals (FIELD_ReferenceNumber))
        {
            return filter.matches (getReferenceNumber ());
        }
        else if (attribName.equals (FIELD_LastStatusChangeDate))
        {
            return filter.matches (getLastStatusChangeDate ());
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return filter.matches (getRemote ());
        }
        else if (attribName.equals (FIELD_City))
        {
            return filter.matches (getCity ());
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return filter.matches (getPostCode ());
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return filter.matches (getExpectedCandidateRadius ());
        }
        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_RequireCV))
        {
            return filter.matches (getRequireCV ());
        }
        else if (attribName.equals (FIELD_IsManuallyClosed))
        {
            return filter.matches (getIsManuallyClosed ());
        }
        else if (attribName.equals (FIELD_LastEdited))
        {
            return filter.matches (getLastEdited ());
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return filter.matches (getIsPPJ ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return filter.matches (getIndustry ());
        }
        else if (attribName.equals (FIELD_CultureStatement))
        {
            return filter.matches (getCultureStatement ());
        }
        else if (attribName.equals (FIELD_DraftLocation))
        {
            return filter.matches (getDraftLocation ());
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return filter.matches (getGoogleAddressText ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Level))
        {
            return filter.matches (getLevel ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Client))
        {
            return filter.matches (getClient ());
        }
        else if (attribName.equals (SINGLEREFERENCE_JobOwner))
        {
            return filter.matches (getJobOwner ());
        }
        else if (attribName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return filter.matches (getCreatedBy ());
        }
        else if (attribName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return filter.matches (getHiringTeam ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Occupation))
        {
            return filter.matches (getOccupation ());
        }
        else if (attribName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return filter.matches (getShortenedURL ());
        }
        else if (attribName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return filter.matches (getAssessmentTemplate ());
        }
        else
        {
            return super.testFilter (attribName, filter);
        }
    }


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

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

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

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

            
            public SearchAll andJobTitle (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_title", "JobTitle");
                return this;
            }
            
            public SearchAll andJobDescription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_description", "JobDescription");
                return this;
            }
            
            public SearchAll andJobStatus (QueryFilter<JobStatus> filter)
            {
                filter.addFilter (context, "tl_job.job_status", "JobStatus");
                return this;
            }
            
            public SearchAll andOpenDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.open_date", "OpenDate");
                return this;
            }
            
            public SearchAll andApplyBy (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.apply_by", "ApplyBy");
                return this;
            }
            
            public SearchAll andIncludeAssessmentCriteria (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.include_assessment_criteria", "IncludeAssessmentCriteria");
                return this;
            }
            
            public SearchAll andAssessmentType (QueryFilter<AssessmentType> filter)
            {
                filter.addFilter (context, "tl_job.assessment_type", "AssessmentType");
                return this;
            }
            
            public SearchAll andRandomKey (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.random_key", "RandomKey");
                return this;
            }
            
            public SearchAll andJobType (QueryFilter<JobType> filter)
            {
                filter.addFilter (context, "tl_job.job_type", "JobType");
                return this;
            }
            
            public SearchAll andReferenceNumber (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.ref_number", "ReferenceNumber");
                return this;
            }
            
            public SearchAll andLastStatusChangeDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_status_change_date", "LastStatusChangeDate");
                return this;
            }
            
            public SearchAll andRemote (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.remote", "Remote");
                return this;
            }
            
            public SearchAll andCity (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.city", "City");
                return this;
            }
            
            public SearchAll andPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.postcode", "PostCode");
                return this;
            }
            
            public SearchAll andExpectedCandidateRadius (QueryFilter<LocationRadius> filter)
            {
                filter.addFilter (context, "tl_job.location_radius", "ExpectedCandidateRadius");
                return this;
            }
            
            public SearchAll andState (QueryFilter<State> filter)
            {
                filter.addFilter (context, "tl_job.state", "State");
                return this;
            }
            
            public SearchAll andCountry (QueryFilter<Countries> filter)
            {
                filter.addFilter (context, "tl_job.country", "Country");
                return this;
            }
            
            public SearchAll andRequireCV (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.require_cv", "RequireCV");
                return this;
            }
            
            public SearchAll andIsManuallyClosed (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.manually_closed", "IsManuallyClosed");
                return this;
            }
            
            public SearchAll andLastEdited (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_edited", "LastEdited");
                return this;
            }
            
            public SearchAll andIsPPJ (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.is_ppj", "IsPPJ");
                return this;
            }
            
            public SearchAll andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_job.industry", "Industry");
                return this;
            }
            
            public SearchAll andCultureStatement (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.culture_statement", "CultureStatement");
                return this;
            }
            
            public SearchAll andDraftLocation (QueryFilter<DraftLocation> filter)
            {
                filter.addFilter (context, "tl_job.draft_location", "DraftLocation");
                return this;
            }
            
            public SearchAll andGoogleAddressText (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.google_address_text", "GoogleAddressText");
                return this;
            }
            
            public SearchAll andLevel (QueryFilter<Level> filter)
            {
                filter.addFilter (context, "tl_job.level_id", "Level");
                return this;
            }
            
            public SearchAll andClient (QueryFilter<Client> filter)
            {
                filter.addFilter (context, "tl_job.client_id", "Client");
                return this;
            }
            
            public SearchAll andJobOwner (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.job_owner_id", "JobOwner");
                return this;
            }
            
            public SearchAll andCreatedBy (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.company_user_id", "CreatedBy");
                return this;
            }
            
            public SearchAll andHiringTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_job.hiring_team_id", "HiringTeam");
                return this;
            }
            
            public SearchAll andOccupation (QueryFilter<Occupation> filter)
            {
                filter.addFilter (context, "tl_job.occupation_id", "Occupation");
                return this;
            }
            
            public SearchAll andShortenedURL (QueryFilter<ShortenedURL> filter)
            {
                filter.addFilter (context, "tl_job.shortened_url_id", "ShortenedURL");
                return this;
            }
            
            public SearchAll andAssessmentTemplate (QueryFilter<AssessmentCriteriaTemplate> filter)
            {
                filter.addFilter (context, "tl_job.template_id", "AssessmentTemplate");
                return this;
            }
            
                public Job[]
             search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_Job, SEARCH_All, criteria);
            Set<Job>   typedResults = new LinkedHashSet <Job> ();
            for (BaseBusinessClass bbcResult : results)
            {
                Job aResult = (Job)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new Job[0]);
                            
        }
    }

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

    public static SearchJobKey SearchByJobKey () { return new SearchJobKey (); }

    public static class SearchJobKey extends SearchObject<Job>
    {
        
        public SearchJobKey byID (Long ID)
        {
            by ("ID", ID);
            return this;
        }
        
        public SearchJobKey byKey (String Key)
        {
            by ("Key", Key);
            return this;
        }
        
            public SearchJobKey andObjectID (QueryFilter<Long> filter)
            {
                filter.addFilter (context, "tl_job.object_id", FIELD_ObjectID);
                return this;
            }

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

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

            
            public SearchJobKey andJobTitle (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_title", "JobTitle");
                return this;
            }
            
            public SearchJobKey andJobDescription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_description", "JobDescription");
                return this;
            }
            
            public SearchJobKey andJobStatus (QueryFilter<JobStatus> filter)
            {
                filter.addFilter (context, "tl_job.job_status", "JobStatus");
                return this;
            }
            
            public SearchJobKey andOpenDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.open_date", "OpenDate");
                return this;
            }
            
            public SearchJobKey andApplyBy (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.apply_by", "ApplyBy");
                return this;
            }
            
            public SearchJobKey andIncludeAssessmentCriteria (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.include_assessment_criteria", "IncludeAssessmentCriteria");
                return this;
            }
            
            public SearchJobKey andAssessmentType (QueryFilter<AssessmentType> filter)
            {
                filter.addFilter (context, "tl_job.assessment_type", "AssessmentType");
                return this;
            }
            
            public SearchJobKey andRandomKey (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.random_key", "RandomKey");
                return this;
            }
            
            public SearchJobKey andJobType (QueryFilter<JobType> filter)
            {
                filter.addFilter (context, "tl_job.job_type", "JobType");
                return this;
            }
            
            public SearchJobKey andReferenceNumber (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.ref_number", "ReferenceNumber");
                return this;
            }
            
            public SearchJobKey andLastStatusChangeDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_status_change_date", "LastStatusChangeDate");
                return this;
            }
            
            public SearchJobKey andRemote (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.remote", "Remote");
                return this;
            }
            
            public SearchJobKey andCity (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.city", "City");
                return this;
            }
            
            public SearchJobKey andPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.postcode", "PostCode");
                return this;
            }
            
            public SearchJobKey andExpectedCandidateRadius (QueryFilter<LocationRadius> filter)
            {
                filter.addFilter (context, "tl_job.location_radius", "ExpectedCandidateRadius");
                return this;
            }
            
            public SearchJobKey andState (QueryFilter<State> filter)
            {
                filter.addFilter (context, "tl_job.state", "State");
                return this;
            }
            
            public SearchJobKey andCountry (QueryFilter<Countries> filter)
            {
                filter.addFilter (context, "tl_job.country", "Country");
                return this;
            }
            
            public SearchJobKey andRequireCV (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.require_cv", "RequireCV");
                return this;
            }
            
            public SearchJobKey andIsManuallyClosed (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.manually_closed", "IsManuallyClosed");
                return this;
            }
            
            public SearchJobKey andLastEdited (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_edited", "LastEdited");
                return this;
            }
            
            public SearchJobKey andIsPPJ (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.is_ppj", "IsPPJ");
                return this;
            }
            
            public SearchJobKey andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_job.industry", "Industry");
                return this;
            }
            
            public SearchJobKey andCultureStatement (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.culture_statement", "CultureStatement");
                return this;
            }
            
            public SearchJobKey andDraftLocation (QueryFilter<DraftLocation> filter)
            {
                filter.addFilter (context, "tl_job.draft_location", "DraftLocation");
                return this;
            }
            
            public SearchJobKey andGoogleAddressText (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.google_address_text", "GoogleAddressText");
                return this;
            }
            
            public SearchJobKey andLevel (QueryFilter<Level> filter)
            {
                filter.addFilter (context, "tl_job.level_id", "Level");
                return this;
            }
            
            public SearchJobKey andClient (QueryFilter<Client> filter)
            {
                filter.addFilter (context, "tl_job.client_id", "Client");
                return this;
            }
            
            public SearchJobKey andJobOwner (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.job_owner_id", "JobOwner");
                return this;
            }
            
            public SearchJobKey andCreatedBy (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.company_user_id", "CreatedBy");
                return this;
            }
            
            public SearchJobKey andHiringTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_job.hiring_team_id", "HiringTeam");
                return this;
            }
            
            public SearchJobKey andOccupation (QueryFilter<Occupation> filter)
            {
                filter.addFilter (context, "tl_job.occupation_id", "Occupation");
                return this;
            }
            
            public SearchJobKey andShortenedURL (QueryFilter<ShortenedURL> filter)
            {
                filter.addFilter (context, "tl_job.shortened_url_id", "ShortenedURL");
                return this;
            }
            
            public SearchJobKey andAssessmentTemplate (QueryFilter<AssessmentCriteriaTemplate> filter)
            {
                filter.addFilter (context, "tl_job.template_id", "AssessmentTemplate");
                return this;
            }
            
                public Job search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_Job, SEARCH_JobKey, criteria);
            Set<Job>   typedResults = new LinkedHashSet <Job> ();
            for (BaseBusinessClass bbcResult : results)
            {
                Job aResult = (Job)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return (Job)singletonResult(ObjstoreUtils.removeDeleted(transaction, typedResults).toArray(new BaseBusinessClass[0]), "Job", "");
                            
        }
    }

        
                public static Job searchJobKey (ObjectTransaction transaction, Long ID, String Key) throws StorageException
        {
            return SearchByJobKey ()
            .byID  (ID)
            .byKey  (Key)
            .search (transaction);
        }

    public static SearchCompany SearchByCompany () { return new SearchCompany (); }

    public static class SearchCompany extends SearchObject<Job>
    {
        
        public SearchCompany byCompany (Company Company)
        {
            by ("Company", Company);
            return this;
        }
        
            public SearchCompany andObjectID (QueryFilter<Long> filter)
            {
                filter.addFilter (context, "tl_job.object_id", FIELD_ObjectID);
                return this;
            }

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

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

            
            public SearchCompany andJobTitle (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_title", "JobTitle");
                return this;
            }
            
            public SearchCompany andJobDescription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_description", "JobDescription");
                return this;
            }
            
            public SearchCompany andJobStatus (QueryFilter<JobStatus> filter)
            {
                filter.addFilter (context, "tl_job.job_status", "JobStatus");
                return this;
            }
            
            public SearchCompany andOpenDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.open_date", "OpenDate");
                return this;
            }
            
            public SearchCompany andApplyBy (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.apply_by", "ApplyBy");
                return this;
            }
            
            public SearchCompany andIncludeAssessmentCriteria (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.include_assessment_criteria", "IncludeAssessmentCriteria");
                return this;
            }
            
            public SearchCompany andAssessmentType (QueryFilter<AssessmentType> filter)
            {
                filter.addFilter (context, "tl_job.assessment_type", "AssessmentType");
                return this;
            }
            
            public SearchCompany andRandomKey (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.random_key", "RandomKey");
                return this;
            }
            
            public SearchCompany andJobType (QueryFilter<JobType> filter)
            {
                filter.addFilter (context, "tl_job.job_type", "JobType");
                return this;
            }
            
            public SearchCompany andReferenceNumber (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.ref_number", "ReferenceNumber");
                return this;
            }
            
            public SearchCompany andLastStatusChangeDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_status_change_date", "LastStatusChangeDate");
                return this;
            }
            
            public SearchCompany andRemote (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.remote", "Remote");
                return this;
            }
            
            public SearchCompany andCity (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.city", "City");
                return this;
            }
            
            public SearchCompany andPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.postcode", "PostCode");
                return this;
            }
            
            public SearchCompany andExpectedCandidateRadius (QueryFilter<LocationRadius> filter)
            {
                filter.addFilter (context, "tl_job.location_radius", "ExpectedCandidateRadius");
                return this;
            }
            
            public SearchCompany andState (QueryFilter<State> filter)
            {
                filter.addFilter (context, "tl_job.state", "State");
                return this;
            }
            
            public SearchCompany andCountry (QueryFilter<Countries> filter)
            {
                filter.addFilter (context, "tl_job.country", "Country");
                return this;
            }
            
            public SearchCompany andRequireCV (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.require_cv", "RequireCV");
                return this;
            }
            
            public SearchCompany andIsManuallyClosed (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.manually_closed", "IsManuallyClosed");
                return this;
            }
            
            public SearchCompany andLastEdited (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_edited", "LastEdited");
                return this;
            }
            
            public SearchCompany andIsPPJ (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.is_ppj", "IsPPJ");
                return this;
            }
            
            public SearchCompany andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_job.industry", "Industry");
                return this;
            }
            
            public SearchCompany andCultureStatement (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.culture_statement", "CultureStatement");
                return this;
            }
            
            public SearchCompany andDraftLocation (QueryFilter<DraftLocation> filter)
            {
                filter.addFilter (context, "tl_job.draft_location", "DraftLocation");
                return this;
            }
            
            public SearchCompany andGoogleAddressText (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.google_address_text", "GoogleAddressText");
                return this;
            }
            
            public SearchCompany andLevel (QueryFilter<Level> filter)
            {
                filter.addFilter (context, "tl_job.level_id", "Level");
                return this;
            }
            
            public SearchCompany andClient (QueryFilter<Client> filter)
            {
                filter.addFilter (context, "tl_job.client_id", "Client");
                return this;
            }
            
            public SearchCompany andJobOwner (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.job_owner_id", "JobOwner");
                return this;
            }
            
            public SearchCompany andCreatedBy (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.company_user_id", "CreatedBy");
                return this;
            }
            
            public SearchCompany andHiringTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_job.hiring_team_id", "HiringTeam");
                return this;
            }
            
            public SearchCompany andOccupation (QueryFilter<Occupation> filter)
            {
                filter.addFilter (context, "tl_job.occupation_id", "Occupation");
                return this;
            }
            
            public SearchCompany andShortenedURL (QueryFilter<ShortenedURL> filter)
            {
                filter.addFilter (context, "tl_job.shortened_url_id", "ShortenedURL");
                return this;
            }
            
            public SearchCompany andAssessmentTemplate (QueryFilter<AssessmentCriteriaTemplate> filter)
            {
                filter.addFilter (context, "tl_job.template_id", "AssessmentTemplate");
                return this;
            }
            
                public Job[]
             search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_Job, SEARCH_Company, criteria);
            Set<Job>   typedResults = new LinkedHashSet <Job> ();
            for (BaseBusinessClass bbcResult : results)
            {
                Job aResult = (Job)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new Job[0]);
                            
        }
    }

        
                public static Job[]
             searchCompany (ObjectTransaction transaction, Company Company) throws StorageException
        {
            return SearchByCompany ()
            .byCompany  (Company)
            .search (transaction);
        }

    public static SearchDetails SearchByDetails () { return new SearchDetails (); }

    public static class SearchDetails extends SearchObject<Job>
    {
        
        public SearchDetails byName (String Name)
        {
            by ("Name", Name);
            return this;
        }
        
            public SearchDetails andObjectID (QueryFilter<Long> filter)
            {
                filter.addFilter (context, "tl_job.object_id", FIELD_ObjectID);
                return this;
            }

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

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

            
            public SearchDetails andJobTitle (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_title", "JobTitle");
                return this;
            }
            
            public SearchDetails andJobDescription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.job_description", "JobDescription");
                return this;
            }
            
            public SearchDetails andJobStatus (QueryFilter<JobStatus> filter)
            {
                filter.addFilter (context, "tl_job.job_status", "JobStatus");
                return this;
            }
            
            public SearchDetails andOpenDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.open_date", "OpenDate");
                return this;
            }
            
            public SearchDetails andApplyBy (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.apply_by", "ApplyBy");
                return this;
            }
            
            public SearchDetails andIncludeAssessmentCriteria (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.include_assessment_criteria", "IncludeAssessmentCriteria");
                return this;
            }
            
            public SearchDetails andAssessmentType (QueryFilter<AssessmentType> filter)
            {
                filter.addFilter (context, "tl_job.assessment_type", "AssessmentType");
                return this;
            }
            
            public SearchDetails andRandomKey (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.random_key", "RandomKey");
                return this;
            }
            
            public SearchDetails andJobType (QueryFilter<JobType> filter)
            {
                filter.addFilter (context, "tl_job.job_type", "JobType");
                return this;
            }
            
            public SearchDetails andReferenceNumber (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.ref_number", "ReferenceNumber");
                return this;
            }
            
            public SearchDetails andLastStatusChangeDate (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_status_change_date", "LastStatusChangeDate");
                return this;
            }
            
            public SearchDetails andRemote (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.remote", "Remote");
                return this;
            }
            
            public SearchDetails andCity (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.city", "City");
                return this;
            }
            
            public SearchDetails andPostCode (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.postcode", "PostCode");
                return this;
            }
            
            public SearchDetails andExpectedCandidateRadius (QueryFilter<LocationRadius> filter)
            {
                filter.addFilter (context, "tl_job.location_radius", "ExpectedCandidateRadius");
                return this;
            }
            
            public SearchDetails andState (QueryFilter<State> filter)
            {
                filter.addFilter (context, "tl_job.state", "State");
                return this;
            }
            
            public SearchDetails andCountry (QueryFilter<Countries> filter)
            {
                filter.addFilter (context, "tl_job.country", "Country");
                return this;
            }
            
            public SearchDetails andRequireCV (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.require_cv", "RequireCV");
                return this;
            }
            
            public SearchDetails andIsManuallyClosed (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.manually_closed", "IsManuallyClosed");
                return this;
            }
            
            public SearchDetails andLastEdited (QueryFilter<Date> filter)
            {
                filter.addFilter (context, "tl_job.last_edited", "LastEdited");
                return this;
            }
            
            public SearchDetails andIsPPJ (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_job.is_ppj", "IsPPJ");
                return this;
            }
            
            public SearchDetails andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_job.industry", "Industry");
                return this;
            }
            
            public SearchDetails andCultureStatement (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.culture_statement", "CultureStatement");
                return this;
            }
            
            public SearchDetails andDraftLocation (QueryFilter<DraftLocation> filter)
            {
                filter.addFilter (context, "tl_job.draft_location", "DraftLocation");
                return this;
            }
            
            public SearchDetails andGoogleAddressText (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_job.google_address_text", "GoogleAddressText");
                return this;
            }
            
            public SearchDetails andLevel (QueryFilter<Level> filter)
            {
                filter.addFilter (context, "tl_job.level_id", "Level");
                return this;
            }
            
            public SearchDetails andClient (QueryFilter<Client> filter)
            {
                filter.addFilter (context, "tl_job.client_id", "Client");
                return this;
            }
            
            public SearchDetails andJobOwner (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.job_owner_id", "JobOwner");
                return this;
            }
            
            public SearchDetails andCreatedBy (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_job.company_user_id", "CreatedBy");
                return this;
            }
            
            public SearchDetails andHiringTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_job.hiring_team_id", "HiringTeam");
                return this;
            }
            
            public SearchDetails andOccupation (QueryFilter<Occupation> filter)
            {
                filter.addFilter (context, "tl_job.occupation_id", "Occupation");
                return this;
            }
            
            public SearchDetails andShortenedURL (QueryFilter<ShortenedURL> filter)
            {
                filter.addFilter (context, "tl_job.shortened_url_id", "ShortenedURL");
                return this;
            }
            
            public SearchDetails andAssessmentTemplate (QueryFilter<AssessmentCriteriaTemplate> filter)
            {
                filter.addFilter (context, "tl_job.template_id", "AssessmentTemplate");
                return this;
            }
            
                public Job[]
             search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_Job, SEARCH_Details, criteria);
            Set<Job>   typedResults = new LinkedHashSet <Job> ();
            for (BaseBusinessClass bbcResult : results)
            {
                Job aResult = (Job)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new Job[0]);
                            
        }
    }

        
                public static Job[]
             searchDetails (ObjectTransaction transaction, String Name) throws StorageException
        {
            return SearchByDetails ()
            .byName  (Name)
            .search (transaction);
        }



    public Object getAttribute (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_JobTitle))
        {
            return HELPER_JobTitle.toObject (getJobTitle ());
        }
        else if (attribName.equals (FIELD_JobDescription))
        {
            return HELPER_JobDescription.toObject (getJobDescription ());
        }
        else if (attribName.equals (FIELD_JobStatus))
        {
            return HELPER_JobStatus.toObject (getJobStatus ());
        }
        else if (attribName.equals (FIELD_OpenDate))
        {
            return HELPER_OpenDate.toObject (getOpenDate ());
        }
        else if (attribName.equals (FIELD_ApplyBy))
        {
            return HELPER_ApplyBy.toObject (getApplyBy ());
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return HELPER_IncludeAssessmentCriteria.toObject (getIncludeAssessmentCriteria ());
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return HELPER_AssessmentType.toObject (getAssessmentType ());
        }
        else if (attribName.equals (FIELD_RandomKey))
        {
            return HELPER_RandomKey.toObject (getRandomKey ());
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return HELPER_JobType.toObject (getJobType ());
        }
        else if (attribName.equals (FIELD_ReferenceNumber))
        {
            return HELPER_ReferenceNumber.toObject (getReferenceNumber ());
        }
        else if (attribName.equals (FIELD_LastStatusChangeDate))
        {
            return HELPER_LastStatusChangeDate.toObject (getLastStatusChangeDate ());
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return HELPER_Remote.toObject (getRemote ());
        }
        else if (attribName.equals (FIELD_City))
        {
            return HELPER_City.toObject (getCity ());
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return HELPER_PostCode.toObject (getPostCode ());
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return HELPER_ExpectedCandidateRadius.toObject (getExpectedCandidateRadius ());
        }
        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_RequireCV))
        {
            return HELPER_RequireCV.toObject (getRequireCV ());
        }
        else if (attribName.equals (FIELD_IsManuallyClosed))
        {
            return HELPER_IsManuallyClosed.toObject (getIsManuallyClosed ());
        }
        else if (attribName.equals (FIELD_LastEdited))
        {
            return HELPER_LastEdited.toObject (getLastEdited ());
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return HELPER_IsPPJ.toObject (getIsPPJ ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry.toObject (getIndustry ());
        }
        else if (attribName.equals (FIELD_CultureStatement))
        {
            return HELPER_CultureStatement.toObject (getCultureStatement ());
        }
        else if (attribName.equals (FIELD_DraftLocation))
        {
            return HELPER_DraftLocation.toObject (getDraftLocation ());
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return HELPER_GoogleAddressText.toObject (getGoogleAddressText ());
        }
        else if (attribName.equals (FIELD_Email))
        {
            return HELPER_Email.toObject (getEmail ());
        }
        else if (attribName.equals (FIELD_Password))
        {
            return HELPER_Password.toObject (getPassword ());
        }
        else if (attribName.equals (FIELD_ConfirmPassword))
        {
            return HELPER_ConfirmPassword.toObject (getConfirmPassword ());
        }
        else if (attribName.equals (FIELD_CompletedDetails))
        {
            return HELPER_CompletedDetails.toObject (getCompletedDetails ());
        }
        else if (attribName.equals (FIELD_CompletedRequirements))
        {
            return HELPER_CompletedRequirements.toObject (getCompletedRequirements ());
        }
        else if (attribName.equals (FIELD_CompletedCulture))
        {
            return HELPER_CompletedCulture.toObject (getCompletedCulture ());
        }
        else if (attribName.equals (FIELD_CompletedAssessmentType))
        {
            return HELPER_CompletedAssessmentType.toObject (getCompletedAssessmentType ());
        }
        else if (attribName.equals (FIELD_SaveAssessmentTemplate))
        {
            return HELPER_SaveAssessmentTemplate.toObject (getSaveAssessmentTemplate ());
        }
        else if (attribName.equals (FIELD_SaveCultureTemplate))
        {
            return HELPER_SaveCultureTemplate.toObject (getSaveCultureTemplate ());
        }
        else if (attribName.equals (FIELD_FromTemplate))
        {
            return HELPER_FromTemplate.toObject (getFromTemplate ());
        }
        else if (attribName.equals (FIELD_AssessmentTemplateName))
        {
            return HELPER_AssessmentTemplateName.toObject (getAssessmentTemplateName ());
        }
        else if (attribName.equals (FIELD_CultureTemplateName))
        {
            return HELPER_CultureTemplateName.toObject (getCultureTemplateName ());
        }
        else if (attribName.equals (FIELD_AppProcessOption))
        {
            return HELPER_AppProcessOption.toObject (getAppProcessOption ());
        }
        else if (attribName.equals (FIELD_RankingCompleted))
        {
            return HELPER_RankingCompleted.toObject (getRankingCompleted ());
        }
        else if (attribName.equals (FIELD_OccupationId))
        {
            return HELPER_OccupationId.toObject (getOccupationId ());
        }
        else
        {
            return super.getAttribute (attribName);
        }
    }


    public AttributeHelper getAttributeHelper (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_JobTitle))
        {
            return HELPER_JobTitle;
        }
        else if (attribName.equals (FIELD_JobDescription))
        {
            return HELPER_JobDescription;
        }
        else if (attribName.equals (FIELD_JobStatus))
        {
            return HELPER_JobStatus;
        }
        else if (attribName.equals (FIELD_OpenDate))
        {
            return HELPER_OpenDate;
        }
        else if (attribName.equals (FIELD_ApplyBy))
        {
            return HELPER_ApplyBy;
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return HELPER_IncludeAssessmentCriteria;
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return HELPER_AssessmentType;
        }
        else if (attribName.equals (FIELD_RandomKey))
        {
            return HELPER_RandomKey;
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return HELPER_JobType;
        }
        else if (attribName.equals (FIELD_ReferenceNumber))
        {
            return HELPER_ReferenceNumber;
        }
        else if (attribName.equals (FIELD_LastStatusChangeDate))
        {
            return HELPER_LastStatusChangeDate;
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return HELPER_Remote;
        }
        else if (attribName.equals (FIELD_City))
        {
            return HELPER_City;
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            return HELPER_PostCode;
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return HELPER_ExpectedCandidateRadius;
        }
        else if (attribName.equals (FIELD_State))
        {
            return HELPER_State;
        }
        else if (attribName.equals (FIELD_Country))
        {
            return HELPER_Country;
        }
        else if (attribName.equals (FIELD_RequireCV))
        {
            return HELPER_RequireCV;
        }
        else if (attribName.equals (FIELD_IsManuallyClosed))
        {
            return HELPER_IsManuallyClosed;
        }
        else if (attribName.equals (FIELD_LastEdited))
        {
            return HELPER_LastEdited;
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            return HELPER_IsPPJ;
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry;
        }
        else if (attribName.equals (FIELD_CultureStatement))
        {
            return HELPER_CultureStatement;
        }
        else if (attribName.equals (FIELD_DraftLocation))
        {
            return HELPER_DraftLocation;
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return HELPER_GoogleAddressText;
        }
        else if (attribName.equals (FIELD_Email))
        {
            return HELPER_Email;
        }
        else if (attribName.equals (FIELD_Password))
        {
            return HELPER_Password;
        }
        else if (attribName.equals (FIELD_ConfirmPassword))
        {
            return HELPER_ConfirmPassword;
        }
        else if (attribName.equals (FIELD_CompletedDetails))
        {
            return HELPER_CompletedDetails;
        }
        else if (attribName.equals (FIELD_CompletedRequirements))
        {
            return HELPER_CompletedRequirements;
        }
        else if (attribName.equals (FIELD_CompletedCulture))
        {
            return HELPER_CompletedCulture;
        }
        else if (attribName.equals (FIELD_CompletedAssessmentType))
        {
            return HELPER_CompletedAssessmentType;
        }
        else if (attribName.equals (FIELD_SaveAssessmentTemplate))
        {
            return HELPER_SaveAssessmentTemplate;
        }
        else if (attribName.equals (FIELD_SaveCultureTemplate))
        {
            return HELPER_SaveCultureTemplate;
        }
        else if (attribName.equals (FIELD_FromTemplate))
        {
            return HELPER_FromTemplate;
        }
        else if (attribName.equals (FIELD_AssessmentTemplateName))
        {
            return HELPER_AssessmentTemplateName;
        }
        else if (attribName.equals (FIELD_CultureTemplateName))
        {
            return HELPER_CultureTemplateName;
        }
        else if (attribName.equals (FIELD_AppProcessOption))
        {
            return HELPER_AppProcessOption;
        }
        else if (attribName.equals (FIELD_RankingCompleted))
        {
            return HELPER_RankingCompleted;
        }
        else if (attribName.equals (FIELD_OccupationId))
        {
            return HELPER_OccupationId;
        }
        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_JobTitle))
        {
            setJobTitle ((String)(HELPER_JobTitle.fromObject (_JobTitle, attribValue)));            
        }
        else if (attribName.equals (FIELD_JobDescription))
        {
            setJobDescription ((String)(HELPER_JobDescription.fromObject (_JobDescription, attribValue)));            
        }
        else if (attribName.equals (FIELD_JobStatus))
        {
            setJobStatus ((JobStatus)(HELPER_JobStatus.fromObject (_JobStatus, attribValue)));            
        }
        else if (attribName.equals (FIELD_OpenDate))
        {
            setOpenDate ((Date)(HELPER_OpenDate.fromObject (_OpenDate, attribValue)));            
        }
        else if (attribName.equals (FIELD_ApplyBy))
        {
            setApplyBy ((Date)(HELPER_ApplyBy.fromObject (_ApplyBy, attribValue)));            
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            setIncludeAssessmentCriteria ((Boolean)(HELPER_IncludeAssessmentCriteria.fromObject (_IncludeAssessmentCriteria, attribValue)));            
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            setAssessmentType ((AssessmentType)(HELPER_AssessmentType.fromObject (_AssessmentType, attribValue)));            
        }
        else if (attribName.equals (FIELD_RandomKey))
        {
            setRandomKey ((String)(HELPER_RandomKey.fromObject (_RandomKey, attribValue)));            
        }
        else if (attribName.equals (FIELD_JobType))
        {
            setJobType ((JobType)(HELPER_JobType.fromObject (_JobType, attribValue)));            
        }
        else if (attribName.equals (FIELD_ReferenceNumber))
        {
            setReferenceNumber ((String)(HELPER_ReferenceNumber.fromObject (_ReferenceNumber, attribValue)));            
        }
        else if (attribName.equals (FIELD_LastStatusChangeDate))
        {
            setLastStatusChangeDate ((Date)(HELPER_LastStatusChangeDate.fromObject (_LastStatusChangeDate, attribValue)));            
        }
        else if (attribName.equals (FIELD_Remote))
        {
            setRemote ((Boolean)(HELPER_Remote.fromObject (_Remote, attribValue)));            
        }
        else if (attribName.equals (FIELD_City))
        {
            setCity ((String)(HELPER_City.fromObject (_City, attribValue)));            
        }
        else if (attribName.equals (FIELD_PostCode))
        {
            setPostCode ((String)(HELPER_PostCode.fromObject (_PostCode, attribValue)));            
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            setExpectedCandidateRadius ((LocationRadius)(HELPER_ExpectedCandidateRadius.fromObject (_ExpectedCandidateRadius, 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_RequireCV))
        {
            setRequireCV ((Boolean)(HELPER_RequireCV.fromObject (_RequireCV, attribValue)));            
        }
        else if (attribName.equals (FIELD_IsManuallyClosed))
        {
            setIsManuallyClosed ((Boolean)(HELPER_IsManuallyClosed.fromObject (_IsManuallyClosed, attribValue)));            
        }
        else if (attribName.equals (FIELD_LastEdited))
        {
            setLastEdited ((Date)(HELPER_LastEdited.fromObject (_LastEdited, attribValue)));            
        }
        else if (attribName.equals (FIELD_IsPPJ))
        {
            setIsPPJ ((Boolean)(HELPER_IsPPJ.fromObject (_IsPPJ, attribValue)));            
        }
        else if (attribName.equals (FIELD_Industry))
        {
            setIndustry ((Industry)(HELPER_Industry.fromObject (_Industry, attribValue)));            
        }
        else if (attribName.equals (FIELD_CultureStatement))
        {
            setCultureStatement ((String)(HELPER_CultureStatement.fromObject (_CultureStatement, attribValue)));            
        }
        else if (attribName.equals (FIELD_DraftLocation))
        {
            setDraftLocation ((DraftLocation)(HELPER_DraftLocation.fromObject (_DraftLocation, attribValue)));            
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            setGoogleAddressText ((String)(HELPER_GoogleAddressText.fromObject (_GoogleAddressText, attribValue)));            
        }
        else if (attribName.equals (FIELD_Email))
        {
            setEmail ((String)(HELPER_Email.fromObject (_Email, attribValue)));            
        }
        else if (attribName.equals (FIELD_Password))
        {
            setPassword ((String)(HELPER_Password.fromObject (_Password, attribValue)));            
        }
        else if (attribName.equals (FIELD_ConfirmPassword))
        {
            setConfirmPassword ((String)(HELPER_ConfirmPassword.fromObject (_ConfirmPassword, attribValue)));            
        }
        else if (attribName.equals (FIELD_CompletedDetails))
        {
            setCompletedDetails ((Boolean)(HELPER_CompletedDetails.fromObject (_CompletedDetails, attribValue)));            
        }
        else if (attribName.equals (FIELD_CompletedRequirements))
        {
            setCompletedRequirements ((Boolean)(HELPER_CompletedRequirements.fromObject (_CompletedRequirements, attribValue)));            
        }
        else if (attribName.equals (FIELD_CompletedCulture))
        {
            setCompletedCulture ((Boolean)(HELPER_CompletedCulture.fromObject (_CompletedCulture, attribValue)));            
        }
        else if (attribName.equals (FIELD_CompletedAssessmentType))
        {
            setCompletedAssessmentType ((Boolean)(HELPER_CompletedAssessmentType.fromObject (_CompletedAssessmentType, attribValue)));            
        }
        else if (attribName.equals (FIELD_SaveAssessmentTemplate))
        {
            setSaveAssessmentTemplate ((Boolean)(HELPER_SaveAssessmentTemplate.fromObject (_SaveAssessmentTemplate, attribValue)));            
        }
        else if (attribName.equals (FIELD_SaveCultureTemplate))
        {
            setSaveCultureTemplate ((Boolean)(HELPER_SaveCultureTemplate.fromObject (_SaveCultureTemplate, attribValue)));            
        }
        else if (attribName.equals (FIELD_FromTemplate))
        {
            setFromTemplate ((Boolean)(HELPER_FromTemplate.fromObject (_FromTemplate, attribValue)));            
        }
        else if (attribName.equals (FIELD_AssessmentTemplateName))
        {
            setAssessmentTemplateName ((String)(HELPER_AssessmentTemplateName.fromObject (_AssessmentTemplateName, attribValue)));            
        }
        else if (attribName.equals (FIELD_CultureTemplateName))
        {
            setCultureTemplateName ((String)(HELPER_CultureTemplateName.fromObject (_CultureTemplateName, attribValue)));            
        }
        else if (attribName.equals (FIELD_AppProcessOption))
        {
            setAppProcessOption ((AppProcessOption)(HELPER_AppProcessOption.fromObject (_AppProcessOption, attribValue)));            
        }
        else if (attribName.equals (FIELD_RankingCompleted))
        {
            setRankingCompleted ((Boolean)(HELPER_RankingCompleted.fromObject (_RankingCompleted, attribValue)));            
        }
        else if (attribName.equals (FIELD_OccupationId))
        {
            setOccupationId ((String)(HELPER_OccupationId.fromObject (_OccupationId, 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_JobTitle))
        {
            return getWriteability_JobTitle ();
        }
        else if (fieldName.equals (FIELD_JobDescription))
        {
            return getWriteability_JobDescription ();
        }
        else if (fieldName.equals (FIELD_JobStatus))
        {
            return getWriteability_JobStatus ();
        }
        else if (fieldName.equals (FIELD_OpenDate))
        {
            return getWriteability_OpenDate ();
        }
        else if (fieldName.equals (FIELD_ApplyBy))
        {
            return getWriteability_ApplyBy ();
        }
        else if (fieldName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return getWriteability_IncludeAssessmentCriteria ();
        }
        else if (fieldName.equals (FIELD_AssessmentType))
        {
            return getWriteability_AssessmentType ();
        }
        else if (fieldName.equals (FIELD_RandomKey))
        {
            return getWriteability_RandomKey ();
        }
        else if (fieldName.equals (FIELD_JobType))
        {
            return getWriteability_JobType ();
        }
        else if (fieldName.equals (FIELD_ReferenceNumber))
        {
            return getWriteability_ReferenceNumber ();
        }
        else if (fieldName.equals (FIELD_LastStatusChangeDate))
        {
            return getWriteability_LastStatusChangeDate ();
        }
        else if (fieldName.equals (FIELD_Remote))
        {
            return getWriteability_Remote ();
        }
        else if (fieldName.equals (FIELD_City))
        {
            return getWriteability_City ();
        }
        else if (fieldName.equals (FIELD_PostCode))
        {
            return getWriteability_PostCode ();
        }
        else if (fieldName.equals (FIELD_ExpectedCandidateRadius))
        {
            return getWriteability_ExpectedCandidateRadius ();
        }
        else if (fieldName.equals (FIELD_State))
        {
            return getWriteability_State ();
        }
        else if (fieldName.equals (FIELD_Country))
        {
            return getWriteability_Country ();
        }
        else if (fieldName.equals (FIELD_RequireCV))
        {
            return getWriteability_RequireCV ();
        }
        else if (fieldName.equals (FIELD_IsManuallyClosed))
        {
            return getWriteability_IsManuallyClosed ();
        }
        else if (fieldName.equals (FIELD_LastEdited))
        {
            return getWriteability_LastEdited ();
        }
        else if (fieldName.equals (FIELD_IsPPJ))
        {
            return getWriteability_IsPPJ ();
        }
        else if (fieldName.equals (FIELD_Industry))
        {
            return getWriteability_Industry ();
        }
        else if (fieldName.equals (FIELD_CultureStatement))
        {
            return getWriteability_CultureStatement ();
        }
        else if (fieldName.equals (FIELD_DraftLocation))
        {
            return getWriteability_DraftLocation ();
        }
        else if (fieldName.equals (FIELD_GoogleAddressText))
        {
            return getWriteability_GoogleAddressText ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_JobApplications))
        {
            return getWriteability_JobApplications ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_AssessmentCriterias))
        {
            return getWriteability_AssessmentCriterias ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_CultureCriterias))
        {
            return getWriteability_CultureCriterias ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_WorkFlows))
        {
            return getWriteability_WorkFlows ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Level))
        {
            return getWriteability_Level ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Client))
        {
            return getWriteability_Client ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getWriteability_JobOwner ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_CreatedBy))
        {
            return getWriteability_CreatedBy ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getWriteability_HiringTeam ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Occupation))
        {
            return getWriteability_Occupation ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_ShortenedURL))
        {
            return getWriteability_ShortenedURL ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_AssessmentTemplate))
        {
            return getWriteability_AssessmentTemplate ();
        }
        else if (fieldName.equals (FIELD_Email))
        {
            return getWriteability_Email ();
        }
        else if (fieldName.equals (FIELD_Password))
        {
            return getWriteability_Password ();
        }
        else if (fieldName.equals (FIELD_ConfirmPassword))
        {
            return getWriteability_ConfirmPassword ();
        }
        else if (fieldName.equals (FIELD_CompletedDetails))
        {
            return getWriteability_CompletedDetails ();
        }
        else if (fieldName.equals (FIELD_CompletedRequirements))
        {
            return getWriteability_CompletedRequirements ();
        }
        else if (fieldName.equals (FIELD_CompletedCulture))
        {
            return getWriteability_CompletedCulture ();
        }
        else if (fieldName.equals (FIELD_CompletedAssessmentType))
        {
            return getWriteability_CompletedAssessmentType ();
        }
        else if (fieldName.equals (FIELD_SaveAssessmentTemplate))
        {
            return getWriteability_SaveAssessmentTemplate ();
        }
        else if (fieldName.equals (FIELD_SaveCultureTemplate))
        {
            return getWriteability_SaveCultureTemplate ();
        }
        else if (fieldName.equals (FIELD_FromTemplate))
        {
            return getWriteability_FromTemplate ();
        }
        else if (fieldName.equals (FIELD_AssessmentTemplateName))
        {
            return getWriteability_AssessmentTemplateName ();
        }
        else if (fieldName.equals (FIELD_CultureTemplateName))
        {
            return getWriteability_CultureTemplateName ();
        }
        else if (fieldName.equals (FIELD_AppProcessOption))
        {
            return getWriteability_AppProcessOption ();
        }
        else if (fieldName.equals (FIELD_RankingCompleted))
        {
            return getWriteability_RankingCompleted ();
        }
        else if (fieldName.equals (FIELD_OccupationId))
        {
            return getWriteability_OccupationId ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_CultureTemplate))
        {
            return getWriteability_CultureTemplate ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_JobTemplate))
        {
            return getWriteability_JobTemplate ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_AppStatusWorkFlow))
        {
            return getWriteability_AppStatusWorkFlow ();
        }
        else
        {
            return super.getWriteable (fieldName);
        }
    }


    public void putUnwriteable (Set<String> fields)
    {
        
            if (getWriteability_JobTitle () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobTitle);
            }
        
            if (getWriteability_JobDescription () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobDescription);
            }
        
            if (getWriteability_JobStatus () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobStatus);
            }
        
            if (getWriteability_OpenDate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_OpenDate);
            }
        
            if (getWriteability_ApplyBy () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ApplyBy);
            }
        
            if (getWriteability_IncludeAssessmentCriteria () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IncludeAssessmentCriteria);
            }
        
            if (getWriteability_AssessmentType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_AssessmentType);
            }
        
            if (getWriteability_RandomKey () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_RandomKey);
            }
        
            if (getWriteability_JobType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobType);
            }
        
            if (getWriteability_ReferenceNumber () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ReferenceNumber);
            }
        
            if (getWriteability_LastStatusChangeDate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_LastStatusChangeDate);
            }
        
            if (getWriteability_Remote () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Remote);
            }
        
            if (getWriteability_City () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_City);
            }
        
            if (getWriteability_PostCode () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_PostCode);
            }
        
            if (getWriteability_ExpectedCandidateRadius () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ExpectedCandidateRadius);
            }
        
            if (getWriteability_State () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_State);
            }
        
            if (getWriteability_Country () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Country);
            }
        
            if (getWriteability_RequireCV () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_RequireCV);
            }
        
            if (getWriteability_IsManuallyClosed () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IsManuallyClosed);
            }
        
            if (getWriteability_LastEdited () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_LastEdited);
            }
        
            if (getWriteability_IsPPJ () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IsPPJ);
            }
        
            if (getWriteability_Industry () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Industry);
            }
        
            if (getWriteability_CultureStatement () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CultureStatement);
            }
        
            if (getWriteability_DraftLocation () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_DraftLocation);
            }
        
            if (getWriteability_GoogleAddressText () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_GoogleAddressText);
            }
        
            if (getWriteability_Email () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Email);
            }
        
            if (getWriteability_Password () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Password);
            }
        
            if (getWriteability_ConfirmPassword () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ConfirmPassword);
            }
        
            if (getWriteability_CompletedDetails () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CompletedDetails);
            }
        
            if (getWriteability_CompletedRequirements () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CompletedRequirements);
            }
        
            if (getWriteability_CompletedCulture () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CompletedCulture);
            }
        
            if (getWriteability_CompletedAssessmentType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CompletedAssessmentType);
            }
        
            if (getWriteability_SaveAssessmentTemplate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_SaveAssessmentTemplate);
            }
        
            if (getWriteability_SaveCultureTemplate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_SaveCultureTemplate);
            }
        
            if (getWriteability_FromTemplate () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_FromTemplate);
            }
        
            if (getWriteability_AssessmentTemplateName () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_AssessmentTemplateName);
            }
        
            if (getWriteability_CultureTemplateName () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_CultureTemplateName);
            }
        
            if (getWriteability_AppProcessOption () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_AppProcessOption);
            }
        
            if (getWriteability_RankingCompleted () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_RankingCompleted);
            }
        
            if (getWriteability_OccupationId () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_OccupationId);
            }
        

        super.putUnwriteable (fields);
    }

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

        
        result.add(HELPER_JobTitle.getAttribObject (getClass (), _JobTitle, true, FIELD_JobTitle));
        result.add(HELPER_JobDescription.getAttribObject (getClass (), _JobDescription, true, FIELD_JobDescription));
        result.add(HELPER_JobStatus.getAttribObject (getClass (), _JobStatus, true, FIELD_JobStatus));
        result.add(HELPER_OpenDate.getAttribObject (getClass (), _OpenDate, false, FIELD_OpenDate));
        result.add(HELPER_ApplyBy.getAttribObject (getClass (), _ApplyBy, false, FIELD_ApplyBy));
        result.add(HELPER_IncludeAssessmentCriteria.getAttribObject (getClass (), _IncludeAssessmentCriteria, true, FIELD_IncludeAssessmentCriteria));
        result.add(HELPER_AssessmentType.getAttribObject (getClass (), _AssessmentType, true, FIELD_AssessmentType));
        result.add(HELPER_RandomKey.getAttribObject (getClass (), _RandomKey, false, FIELD_RandomKey));
        result.add(HELPER_JobType.getAttribObject (getClass (), _JobType, true, FIELD_JobType));
        result.add(HELPER_ReferenceNumber.getAttribObject (getClass (), _ReferenceNumber, false, FIELD_ReferenceNumber));
        result.add(HELPER_LastStatusChangeDate.getAttribObject (getClass (), _LastStatusChangeDate, false, FIELD_LastStatusChangeDate));
        result.add(HELPER_Remote.getAttribObject (getClass (), _Remote, false, FIELD_Remote));
        result.add(HELPER_City.getAttribObject (getClass (), _City, false, FIELD_City));
        result.add(HELPER_PostCode.getAttribObject (getClass (), _PostCode, false, FIELD_PostCode));
        result.add(HELPER_ExpectedCandidateRadius.getAttribObject (getClass (), _ExpectedCandidateRadius, true, FIELD_ExpectedCandidateRadius));
        result.add(HELPER_State.getAttribObject (getClass (), _State, false, FIELD_State));
        result.add(HELPER_Country.getAttribObject (getClass (), _Country, false, FIELD_Country));
        result.add(HELPER_RequireCV.getAttribObject (getClass (), _RequireCV, false, FIELD_RequireCV));
        result.add(HELPER_IsManuallyClosed.getAttribObject (getClass (), _IsManuallyClosed, false, FIELD_IsManuallyClosed));
        result.add(HELPER_LastEdited.getAttribObject (getClass (), _LastEdited, false, FIELD_LastEdited));
        result.add(HELPER_IsPPJ.getAttribObject (getClass (), _IsPPJ, false, FIELD_IsPPJ));
        result.add(HELPER_Industry.getAttribObject (getClass (), _Industry, false, FIELD_Industry));
        result.add(HELPER_CultureStatement.getAttribObject (getClass (), _CultureStatement, false, FIELD_CultureStatement));
        result.add(HELPER_DraftLocation.getAttribObject (getClass (), _DraftLocation, false, FIELD_DraftLocation));
        result.add(HELPER_GoogleAddressText.getAttribObject (getClass (), _GoogleAddressText, false, FIELD_GoogleAddressText));
        result.add(HELPER_Email.getAttribObject (getClass (), _Email, false, FIELD_Email));
        result.add(HELPER_Password.getAttribObject (getClass (), _Password, false, FIELD_Password));
        result.add(HELPER_ConfirmPassword.getAttribObject (getClass (), _ConfirmPassword, false, FIELD_ConfirmPassword));
        result.add(HELPER_CompletedDetails.getAttribObject (getClass (), _CompletedDetails, false, FIELD_CompletedDetails));
        result.add(HELPER_CompletedRequirements.getAttribObject (getClass (), _CompletedRequirements, false, FIELD_CompletedRequirements));
        result.add(HELPER_CompletedCulture.getAttribObject (getClass (), _CompletedCulture, false, FIELD_CompletedCulture));
        result.add(HELPER_CompletedAssessmentType.getAttribObject (getClass (), _CompletedAssessmentType, false, FIELD_CompletedAssessmentType));
        result.add(HELPER_SaveAssessmentTemplate.getAttribObject (getClass (), _SaveAssessmentTemplate, false, FIELD_SaveAssessmentTemplate));
        result.add(HELPER_SaveCultureTemplate.getAttribObject (getClass (), _SaveCultureTemplate, false, FIELD_SaveCultureTemplate));
        result.add(HELPER_FromTemplate.getAttribObject (getClass (), _FromTemplate, false, FIELD_FromTemplate));
        result.add(HELPER_AssessmentTemplateName.getAttribObject (getClass (), _AssessmentTemplateName, false, FIELD_AssessmentTemplateName));
        result.add(HELPER_CultureTemplateName.getAttribObject (getClass (), _CultureTemplateName, false, FIELD_CultureTemplateName));
        result.add(HELPER_AppProcessOption.getAttribObject (getClass (), _AppProcessOption, false, FIELD_AppProcessOption));
        result.add(HELPER_RankingCompleted.getAttribObject (getClass (), _RankingCompleted, false, FIELD_RankingCompleted));
        result.add(HELPER_OccupationId.getAttribObject (getClass (), _OccupationId, false, FIELD_OccupationId));

        return result;
    }


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


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

    public void preCommit (boolean willBeStored) throws Exception
    {
        super.preCommit(willBeStored);
        
        if(willBeStored)
        {
        
        }
    }

    public oneit.servlets.objstore.binary.BinaryContentHandler getBinaryContentHandler(String attribName)
    {
        
        
        return super.getBinaryContentHandler(attribName);
    }

    public static class JobBehaviourDecorator extends BaseBusinessClass.BBCBehaviourDecorator<Job>
    {

    /**
     * Get the attribute JobTitle
     */
    public String getJobTitle (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute JobTitle.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setJobTitle (Job obj, String newJobTitle) throws FieldException
    {
        return newJobTitle;
    }

    /**
     * Get the attribute JobDescription
     */
    public String getJobDescription (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute JobDescription.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setJobDescription (Job obj, String newJobDescription) throws FieldException
    {
        return newJobDescription;
    }

    /**
     * Get the attribute JobStatus
     */
    public JobStatus getJobStatus (Job obj, JobStatus original)
    {
        return original;
    }

    /**
     * Change the value set for attribute JobStatus.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public JobStatus setJobStatus (Job obj, JobStatus newJobStatus) throws FieldException
    {
        return newJobStatus;
    }

    /**
     * Get the attribute OpenDate
     */
    public Date getOpenDate (Job obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute OpenDate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setOpenDate (Job obj, Date newOpenDate) throws FieldException
    {
        return newOpenDate;
    }

    /**
     * Get the attribute ApplyBy
     */
    public Date getApplyBy (Job obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute ApplyBy.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setApplyBy (Job obj, Date newApplyBy) throws FieldException
    {
        return newApplyBy;
    }

    /**
     * Get the attribute IncludeAssessmentCriteria
     */
    public Boolean getIncludeAssessmentCriteria (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute IncludeAssessmentCriteria.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setIncludeAssessmentCriteria (Job obj, Boolean newIncludeAssessmentCriteria) throws FieldException
    {
        return newIncludeAssessmentCriteria;
    }

    /**
     * Get the attribute AssessmentType
     */
    public AssessmentType getAssessmentType (Job obj, AssessmentType original)
    {
        return original;
    }

    /**
     * Change the value set for attribute AssessmentType.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public AssessmentType setAssessmentType (Job obj, AssessmentType newAssessmentType) throws FieldException
    {
        return newAssessmentType;
    }

    /**
     * Get the attribute RandomKey
     */
    public String getRandomKey (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute RandomKey.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setRandomKey (Job obj, String newRandomKey) throws FieldException
    {
        return newRandomKey;
    }

    /**
     * Get the attribute JobType
     */
    public JobType getJobType (Job obj, JobType original)
    {
        return original;
    }

    /**
     * Change the value set for attribute JobType.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public JobType setJobType (Job obj, JobType newJobType) throws FieldException
    {
        return newJobType;
    }

    /**
     * Get the attribute ReferenceNumber
     */
    public String getReferenceNumber (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute ReferenceNumber.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setReferenceNumber (Job obj, String newReferenceNumber) throws FieldException
    {
        return newReferenceNumber;
    }

    /**
     * Get the attribute LastStatusChangeDate
     */
    public Date getLastStatusChangeDate (Job obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute LastStatusChangeDate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setLastStatusChangeDate (Job obj, Date newLastStatusChangeDate) throws FieldException
    {
        return newLastStatusChangeDate;
    }

    /**
     * Get the attribute Remote
     */
    public Boolean getRemote (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute Remote.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setRemote (Job obj, Boolean newRemote) throws FieldException
    {
        return newRemote;
    }

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

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

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

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

    /**
     * Get the attribute ExpectedCandidateRadius
     */
    public LocationRadius getExpectedCandidateRadius (Job obj, LocationRadius original)
    {
        return original;
    }

    /**
     * Change the value set for attribute ExpectedCandidateRadius.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public LocationRadius setExpectedCandidateRadius (Job obj, LocationRadius newExpectedCandidateRadius) throws FieldException
    {
        return newExpectedCandidateRadius;
    }

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

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

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

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

    /**
     * Get the attribute RequireCV
     */
    public Boolean getRequireCV (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute RequireCV.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setRequireCV (Job obj, Boolean newRequireCV) throws FieldException
    {
        return newRequireCV;
    }

    /**
     * Get the attribute IsManuallyClosed
     */
    public Boolean getIsManuallyClosed (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute IsManuallyClosed.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setIsManuallyClosed (Job obj, Boolean newIsManuallyClosed) throws FieldException
    {
        return newIsManuallyClosed;
    }

    /**
     * Get the attribute LastEdited
     */
    public Date getLastEdited (Job obj, Date original)
    {
        return original;
    }

    /**
     * Change the value set for attribute LastEdited.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Date setLastEdited (Job obj, Date newLastEdited) throws FieldException
    {
        return newLastEdited;
    }

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

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

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

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

    /**
     * Get the attribute CultureStatement
     */
    public String getCultureStatement (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CultureStatement.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCultureStatement (Job obj, String newCultureStatement) throws FieldException
    {
        return newCultureStatement;
    }

    /**
     * Get the attribute DraftLocation
     */
    public DraftLocation getDraftLocation (Job obj, DraftLocation original)
    {
        return original;
    }

    /**
     * Change the value set for attribute DraftLocation.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public DraftLocation setDraftLocation (Job obj, DraftLocation newDraftLocation) throws FieldException
    {
        return newDraftLocation;
    }

    /**
     * Get the attribute GoogleAddressText
     */
    public String getGoogleAddressText (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute GoogleAddressText.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setGoogleAddressText (Job obj, String newGoogleAddressText) throws FieldException
    {
        return newGoogleAddressText;
    }

    /**
     * Get the attribute Email
     */
    public String getEmail (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute Email.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setEmail (Job obj, String newEmail) throws FieldException
    {
        return newEmail;
    }

    /**
     * Get the attribute Password
     */
    public String getPassword (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute Password.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setPassword (Job obj, String newPassword) throws FieldException
    {
        return newPassword;
    }

    /**
     * Get the attribute ConfirmPassword
     */
    public String getConfirmPassword (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute ConfirmPassword.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setConfirmPassword (Job obj, String newConfirmPassword) throws FieldException
    {
        return newConfirmPassword;
    }

    /**
     * Get the attribute CompletedDetails
     */
    public Boolean getCompletedDetails (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CompletedDetails.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setCompletedDetails (Job obj, Boolean newCompletedDetails) throws FieldException
    {
        return newCompletedDetails;
    }

    /**
     * Get the attribute CompletedRequirements
     */
    public Boolean getCompletedRequirements (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CompletedRequirements.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setCompletedRequirements (Job obj, Boolean newCompletedRequirements) throws FieldException
    {
        return newCompletedRequirements;
    }

    /**
     * Get the attribute CompletedCulture
     */
    public Boolean getCompletedCulture (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CompletedCulture.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setCompletedCulture (Job obj, Boolean newCompletedCulture) throws FieldException
    {
        return newCompletedCulture;
    }

    /**
     * Get the attribute CompletedAssessmentType
     */
    public Boolean getCompletedAssessmentType (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CompletedAssessmentType.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setCompletedAssessmentType (Job obj, Boolean newCompletedAssessmentType) throws FieldException
    {
        return newCompletedAssessmentType;
    }

    /**
     * Get the attribute SaveAssessmentTemplate
     */
    public Boolean getSaveAssessmentTemplate (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute SaveAssessmentTemplate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setSaveAssessmentTemplate (Job obj, Boolean newSaveAssessmentTemplate) throws FieldException
    {
        return newSaveAssessmentTemplate;
    }

    /**
     * Get the attribute SaveCultureTemplate
     */
    public Boolean getSaveCultureTemplate (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute SaveCultureTemplate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setSaveCultureTemplate (Job obj, Boolean newSaveCultureTemplate) throws FieldException
    {
        return newSaveCultureTemplate;
    }

    /**
     * Get the attribute FromTemplate
     */
    public Boolean getFromTemplate (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute FromTemplate.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setFromTemplate (Job obj, Boolean newFromTemplate) throws FieldException
    {
        return newFromTemplate;
    }

    /**
     * Get the attribute AssessmentTemplateName
     */
    public String getAssessmentTemplateName (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute AssessmentTemplateName.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setAssessmentTemplateName (Job obj, String newAssessmentTemplateName) throws FieldException
    {
        return newAssessmentTemplateName;
    }

    /**
     * Get the attribute CultureTemplateName
     */
    public String getCultureTemplateName (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute CultureTemplateName.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setCultureTemplateName (Job obj, String newCultureTemplateName) throws FieldException
    {
        return newCultureTemplateName;
    }

    /**
     * Get the attribute AppProcessOption
     */
    public AppProcessOption getAppProcessOption (Job obj, AppProcessOption original)
    {
        return original;
    }

    /**
     * Change the value set for attribute AppProcessOption.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public AppProcessOption setAppProcessOption (Job obj, AppProcessOption newAppProcessOption) throws FieldException
    {
        return newAppProcessOption;
    }

    /**
     * Get the attribute RankingCompleted
     */
    public Boolean getRankingCompleted (Job obj, Boolean original)
    {
        return original;
    }

    /**
     * Change the value set for attribute RankingCompleted.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public Boolean setRankingCompleted (Job obj, Boolean newRankingCompleted) throws FieldException
    {
        return newRankingCompleted;
    }

    /**
     * Get the attribute OccupationId
     */
    public String getOccupationId (Job obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute OccupationId.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setOccupationId (Job obj, String newOccupationId) throws FieldException
    {
        return newOccupationId;
    }

    }

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

        public JobPipeLineFactory (Collection<From> seed)
        {
            super(seed);
        }
        
        
        public PipeLine<From, ? extends Object> to(String name)
        {
            if (name.equals ("JobApplications"))
            {
                return toJobApplications ();
            }                
            if (name.equals ("AssessmentCriterias"))
            {
                return toAssessmentCriterias ();
            }                
            if (name.equals ("CultureCriterias"))
            {
                return toCultureCriterias ();
            }                
            if (name.equals ("WorkFlows"))
            {
                return toWorkFlows ();
            }                
            if (name.equals ("Email"))
            {
                return toEmail ();
            }                
            if (name.equals ("Password"))
            {
                return toPassword ();
            }                
            if (name.equals ("ConfirmPassword"))
            {
                return toConfirmPassword ();
            }                
            if (name.equals ("CompletedDetails"))
            {
                return toCompletedDetails ();
            }                
            if (name.equals ("CompletedRequirements"))
            {
                return toCompletedRequirements ();
            }                
            if (name.equals ("CompletedCulture"))
            {
                return toCompletedCulture ();
            }                
            if (name.equals ("CompletedAssessmentType"))
            {
                return toCompletedAssessmentType ();
            }                
            if (name.equals ("SaveAssessmentTemplate"))
            {
                return toSaveAssessmentTemplate ();
            }                
            if (name.equals ("SaveCultureTemplate"))
            {
                return toSaveCultureTemplate ();
            }                
            if (name.equals ("FromTemplate"))
            {
                return toFromTemplate ();
            }                
            if (name.equals ("AssessmentTemplateName"))
            {
                return toAssessmentTemplateName ();
            }                
            if (name.equals ("CultureTemplateName"))
            {
                return toCultureTemplateName ();
            }                
            if (name.equals ("AppProcessOption"))
            {
                return toAppProcessOption ();
            }                
            if (name.equals ("RankingCompleted"))
            {
                return toRankingCompleted ();
            }                
            if (name.equals ("OccupationId"))
            {
                return toOccupationId ();
            }                
            if (name.equals ("CultureTemplate"))
            {
                return toCultureTemplate ();
            }                
            if (name.equals ("JobTemplate"))
            {
                return toJobTemplate ();
            }                
            if (name.equals ("AppStatusWorkFlow"))
            {
                return toAppStatusWorkFlow ();
            }                
            if (name.equals ("JobTitle"))
            {
                return toJobTitle ();
            }                
            if (name.equals ("JobDescription"))
            {
                return toJobDescription ();
            }                
            if (name.equals ("JobStatus"))
            {
                return toJobStatus ();
            }                
            if (name.equals ("OpenDate"))
            {
                return toOpenDate ();
            }                
            if (name.equals ("ApplyBy"))
            {
                return toApplyBy ();
            }                
            if (name.equals ("IncludeAssessmentCriteria"))
            {
                return toIncludeAssessmentCriteria ();
            }                
            if (name.equals ("AssessmentType"))
            {
                return toAssessmentType ();
            }                
            if (name.equals ("RandomKey"))
            {
                return toRandomKey ();
            }                
            if (name.equals ("JobType"))
            {
                return toJobType ();
            }                
            if (name.equals ("ReferenceNumber"))
            {
                return toReferenceNumber ();
            }                
            if (name.equals ("LastStatusChangeDate"))
            {
                return toLastStatusChangeDate ();
            }                
            if (name.equals ("Remote"))
            {
                return toRemote ();
            }                
            if (name.equals ("City"))
            {
                return toCity ();
            }                
            if (name.equals ("PostCode"))
            {
                return toPostCode ();
            }                
            if (name.equals ("ExpectedCandidateRadius"))
            {
                return toExpectedCandidateRadius ();
            }                
            if (name.equals ("State"))
            {
                return toState ();
            }                
            if (name.equals ("Country"))
            {
                return toCountry ();
            }                
            if (name.equals ("RequireCV"))
            {
                return toRequireCV ();
            }                
            if (name.equals ("IsManuallyClosed"))
            {
                return toIsManuallyClosed ();
            }                
            if (name.equals ("LastEdited"))
            {
                return toLastEdited ();
            }                
            if (name.equals ("IsPPJ"))
            {
                return toIsPPJ ();
            }                
            if (name.equals ("Industry"))
            {
                return toIndustry ();
            }                
            if (name.equals ("CultureStatement"))
            {
                return toCultureStatement ();
            }                
            if (name.equals ("DraftLocation"))
            {
                return toDraftLocation ();
            }                
            if (name.equals ("GoogleAddressText"))
            {
                return toGoogleAddressText ();
            }                
            if (name.equals ("Level"))
            {
                return toLevel ();
            }                
            if (name.equals ("Client"))
            {
                return toClient ();
            }                
            if (name.equals ("JobOwner"))
            {
                return toJobOwner ();
            }                
            if (name.equals ("CreatedBy"))
            {
                return toCreatedBy ();
            }                
            if (name.equals ("HiringTeam"))
            {
                return toHiringTeam ();
            }                
            if (name.equals ("Occupation"))
            {
                return toOccupation ();
            }                
            if (name.equals ("ShortenedURL"))
            {
                return toShortenedURL ();
            }                
            if (name.equals ("AssessmentTemplate"))
            {
                return toAssessmentTemplate ();
            }                
            
            
            return super.to(name);
        }
        
        
        public PipeLine<From, String> toEmail () { return pipe(new ORMAttributePipe<Me, String>(FIELD_Email));  }
        
        public PipeLine<From, String> toPassword () { return pipe(new ORMAttributePipe<Me, String>(FIELD_Password));  }
        
        public PipeLine<From, String> toConfirmPassword () { return pipe(new ORMAttributePipe<Me, String>(FIELD_ConfirmPassword));  }
        
        public PipeLine<From, Boolean> toCompletedDetails () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedDetails));  }
        
        public PipeLine<From, Boolean> toCompletedRequirements () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedRequirements));  }
        
        public PipeLine<From, Boolean> toCompletedCulture () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedCulture));  }
        
        public PipeLine<From, Boolean> toCompletedAssessmentType () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedAssessmentType));  }
        
        public PipeLine<From, Boolean> toSaveAssessmentTemplate () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_SaveAssessmentTemplate));  }
        
        public PipeLine<From, Boolean> toSaveCultureTemplate () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_SaveCultureTemplate));  }
        
        public PipeLine<From, Boolean> toFromTemplate () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_FromTemplate));  }
        
        public PipeLine<From, String> toAssessmentTemplateName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_AssessmentTemplateName));  }
        
        public PipeLine<From, String> toCultureTemplateName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CultureTemplateName));  }
        
        public PipeLine<From, AppProcessOption> toAppProcessOption () { return pipe(new ORMAttributePipe<Me, AppProcessOption>(FIELD_AppProcessOption));  }
        
        public PipeLine<From, Boolean> toRankingCompleted () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_RankingCompleted));  }
        
        public PipeLine<From, String> toOccupationId () { return pipe(new ORMAttributePipe<Me, String>(FIELD_OccupationId));  }
        
        public PipeLine<From, String> toJobTitle () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobTitle));  }
        
        public PipeLine<From, String> toJobDescription () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobDescription));  }
        
        public PipeLine<From, JobStatus> toJobStatus () { return pipe(new ORMAttributePipe<Me, JobStatus>(FIELD_JobStatus));  }
        
        public PipeLine<From, Date> toOpenDate () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_OpenDate));  }
        
        public PipeLine<From, Date> toApplyBy () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_ApplyBy));  }
        
        public PipeLine<From, Boolean> toIncludeAssessmentCriteria () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IncludeAssessmentCriteria));  }
        
        public PipeLine<From, AssessmentType> toAssessmentType () { return pipe(new ORMAttributePipe<Me, AssessmentType>(FIELD_AssessmentType));  }
        
        public PipeLine<From, String> toRandomKey () { return pipe(new ORMAttributePipe<Me, String>(FIELD_RandomKey));  }
        
        public PipeLine<From, JobType> toJobType () { return pipe(new ORMAttributePipe<Me, JobType>(FIELD_JobType));  }
        
        public PipeLine<From, String> toReferenceNumber () { return pipe(new ORMAttributePipe<Me, String>(FIELD_ReferenceNumber));  }
        
        public PipeLine<From, Date> toLastStatusChangeDate () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_LastStatusChangeDate));  }
        
        public PipeLine<From, Boolean> toRemote () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_Remote));  }
        
        public PipeLine<From, String> toCity () { return pipe(new ORMAttributePipe<Me, String>(FIELD_City));  }
        
        public PipeLine<From, String> toPostCode () { return pipe(new ORMAttributePipe<Me, String>(FIELD_PostCode));  }
        
        public PipeLine<From, LocationRadius> toExpectedCandidateRadius () { return pipe(new ORMAttributePipe<Me, LocationRadius>(FIELD_ExpectedCandidateRadius));  }
        
        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, Boolean> toRequireCV () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_RequireCV));  }
        
        public PipeLine<From, Boolean> toIsManuallyClosed () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IsManuallyClosed));  }
        
        public PipeLine<From, Date> toLastEdited () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_LastEdited));  }
        
        public PipeLine<From, Boolean> toIsPPJ () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IsPPJ));  }
        
        public PipeLine<From, Industry> toIndustry () { return pipe(new ORMAttributePipe<Me, Industry>(FIELD_Industry));  }
        
        public PipeLine<From, String> toCultureStatement () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CultureStatement));  }
        
        public PipeLine<From, DraftLocation> toDraftLocation () { return pipe(new ORMAttributePipe<Me, DraftLocation>(FIELD_DraftLocation));  }
        
        public PipeLine<From, String> toGoogleAddressText () { return pipe(new ORMAttributePipe<Me, String>(FIELD_GoogleAddressText));  }
        public CultureCriteriaTemplate.CultureCriteriaTemplatePipeLineFactory<From, CultureCriteriaTemplate> toCultureTemplate () { return toCultureTemplate (Filter.ALL); }

        public CultureCriteriaTemplate.CultureCriteriaTemplatePipeLineFactory<From, CultureCriteriaTemplate> toCultureTemplate (Filter<CultureCriteriaTemplate> filter) 
        { 
            return CultureCriteriaTemplate.REFERENCE_CultureCriteriaTemplate.new CultureCriteriaTemplatePipeLineFactory<From, CultureCriteriaTemplate> (this, new ORMSingleAssocPipe<Me, CultureCriteriaTemplate>(SINGLEREFERENCE_CultureTemplate, filter)); 
        }
        public Job.JobPipeLineFactory<From, Job> toJobTemplate () { return toJobTemplate (Filter.ALL); }

        public Job.JobPipeLineFactory<From, Job> toJobTemplate (Filter<Job> filter) 
        { 
            return Job.REFERENCE_Job.new JobPipeLineFactory<From, Job> (this, new ORMSingleAssocPipe<Me, Job>(SINGLEREFERENCE_JobTemplate, filter)); 
        }
        public WorkFlow.WorkFlowPipeLineFactory<From, WorkFlow> toAppStatusWorkFlow () { return toAppStatusWorkFlow (Filter.ALL); }

        public WorkFlow.WorkFlowPipeLineFactory<From, WorkFlow> toAppStatusWorkFlow (Filter<WorkFlow> filter) 
        { 
            return WorkFlow.REFERENCE_WorkFlow.new WorkFlowPipeLineFactory<From, WorkFlow> (this, new ORMSingleAssocPipe<Me, WorkFlow>(SINGLEREFERENCE_AppStatusWorkFlow, filter)); 
        }
        public Level.LevelPipeLineFactory<From, Level> toLevel () { return toLevel (Filter.ALL); }

        public Level.LevelPipeLineFactory<From, Level> toLevel (Filter<Level> filter) 
        { 
            return Level.REFERENCE_Level.new LevelPipeLineFactory<From, Level> (this, new ORMSingleAssocPipe<Me, Level>(SINGLEREFERENCE_Level, filter)); 
        }
        public Client.ClientPipeLineFactory<From, Client> toClient () { return toClient (Filter.ALL); }

        public Client.ClientPipeLineFactory<From, Client> toClient (Filter<Client> filter) 
        { 
            return Client.REFERENCE_Client.new ClientPipeLineFactory<From, Client> (this, new ORMSingleAssocPipe<Me, Client>(SINGLEREFERENCE_Client, filter)); 
        }
        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toJobOwner () { return toJobOwner (Filter.ALL); }

        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toJobOwner (Filter<CompanyUser> filter) 
        { 
            return CompanyUser.REFERENCE_CompanyUser.new CompanyUserPipeLineFactory<From, CompanyUser> (this, new ORMSingleAssocPipe<Me, CompanyUser>(SINGLEREFERENCE_JobOwner, filter)); 
        }
        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toCreatedBy () { return toCreatedBy (Filter.ALL); }

        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toCreatedBy (Filter<CompanyUser> filter) 
        { 
            return CompanyUser.REFERENCE_CompanyUser.new CompanyUserPipeLineFactory<From, CompanyUser> (this, new ORMSingleAssocPipe<Me, CompanyUser>(SINGLEREFERENCE_CreatedBy, filter)); 
        }
        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toHiringTeam () { return toHiringTeam (Filter.ALL); }

        public HiringTeam.HiringTeamPipeLineFactory<From, HiringTeam> toHiringTeam (Filter<HiringTeam> filter) 
        { 
            return HiringTeam.REFERENCE_HiringTeam.new HiringTeamPipeLineFactory<From, HiringTeam> (this, new ORMSingleAssocPipe<Me, HiringTeam>(SINGLEREFERENCE_HiringTeam, filter)); 
        }
        public Occupation.OccupationPipeLineFactory<From, Occupation> toOccupation () { return toOccupation (Filter.ALL); }

        public Occupation.OccupationPipeLineFactory<From, Occupation> toOccupation (Filter<Occupation> filter) 
        { 
            return Occupation.REFERENCE_Occupation.new OccupationPipeLineFactory<From, Occupation> (this, new ORMSingleAssocPipe<Me, Occupation>(SINGLEREFERENCE_Occupation, filter)); 
        }
        public ShortenedURL.ShortenedURLPipeLineFactory<From, ShortenedURL> toShortenedURL () { return toShortenedURL (Filter.ALL); }

        public ShortenedURL.ShortenedURLPipeLineFactory<From, ShortenedURL> toShortenedURL (Filter<ShortenedURL> filter) 
        { 
            return ShortenedURL.REFERENCE_ShortenedURL.new ShortenedURLPipeLineFactory<From, ShortenedURL> (this, new ORMSingleAssocPipe<Me, ShortenedURL>(SINGLEREFERENCE_ShortenedURL, filter)); 
        }
        public AssessmentCriteriaTemplate.AssessmentCriteriaTemplatePipeLineFactory<From, AssessmentCriteriaTemplate> toAssessmentTemplate () { return toAssessmentTemplate (Filter.ALL); }

        public AssessmentCriteriaTemplate.AssessmentCriteriaTemplatePipeLineFactory<From, AssessmentCriteriaTemplate> toAssessmentTemplate (Filter<AssessmentCriteriaTemplate> filter) 
        { 
            return AssessmentCriteriaTemplate.REFERENCE_AssessmentCriteriaTemplate.new AssessmentCriteriaTemplatePipeLineFactory<From, AssessmentCriteriaTemplate> (this, new ORMSingleAssocPipe<Me, AssessmentCriteriaTemplate>(SINGLEREFERENCE_AssessmentTemplate, filter)); 
        }
        public JobApplication.JobApplicationPipeLineFactory<From, JobApplication> toJobApplications () { return toJobApplications(Filter.ALL); }        

        public JobApplication.JobApplicationPipeLineFactory<From, JobApplication> toJobApplications (Filter<JobApplication> filter)
        {
            return JobApplication.REFERENCE_JobApplication.new JobApplicationPipeLineFactory<From, JobApplication> (this, new ORMMultiAssocPipe<Me, JobApplication>(MULTIPLEREFERENCE_JobApplications, filter)); 
        }
        public AssessmentCriteria.AssessmentCriteriaPipeLineFactory<From, AssessmentCriteria> toAssessmentCriterias () { return toAssessmentCriterias(Filter.ALL); }        

        public AssessmentCriteria.AssessmentCriteriaPipeLineFactory<From, AssessmentCriteria> toAssessmentCriterias (Filter<AssessmentCriteria> filter)
        {
            return AssessmentCriteria.REFERENCE_AssessmentCriteria.new AssessmentCriteriaPipeLineFactory<From, AssessmentCriteria> (this, new ORMMultiAssocPipe<Me, AssessmentCriteria>(MULTIPLEREFERENCE_AssessmentCriterias, filter)); 
        }
        public CultureCriteria.CultureCriteriaPipeLineFactory<From, CultureCriteria> toCultureCriterias () { return toCultureCriterias(Filter.ALL); }        

        public CultureCriteria.CultureCriteriaPipeLineFactory<From, CultureCriteria> toCultureCriterias (Filter<CultureCriteria> filter)
        {
            return CultureCriteria.REFERENCE_CultureCriteria.new CultureCriteriaPipeLineFactory<From, CultureCriteria> (this, new ORMMultiAssocPipe<Me, CultureCriteria>(MULTIPLEREFERENCE_CultureCriterias, filter)); 
        }
        public WorkFlow.WorkFlowPipeLineFactory<From, WorkFlow> toWorkFlows () { return toWorkFlows(Filter.ALL); }        

        public WorkFlow.WorkFlowPipeLineFactory<From, WorkFlow> toWorkFlows (Filter<WorkFlow> filter)
        {
            return WorkFlow.REFERENCE_WorkFlow.new WorkFlowPipeLineFactory<From, WorkFlow> (this, new ORMMultiAssocPipe<Me, WorkFlow>(MULTIPLEREFERENCE_WorkFlows, filter)); 
        }
        
    }
    
    public boolean isTransientAttrib(String attribName)
    {
        
        if(CollectionUtils.equals(attribName, "Email"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "Password"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "ConfirmPassword"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CompletedDetails"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CompletedRequirements"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CompletedCulture"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CompletedAssessmentType"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "SaveAssessmentTemplate"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "SaveCultureTemplate"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "FromTemplate"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "AssessmentTemplateName"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "CultureTemplateName"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "AppProcessOption"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "RankingCompleted"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(attribName, "OccupationId"))
        {
            return true;
        }
        

        return super.isTransientAttrib(attribName);
    }

    public boolean isTransientSingleReference(String assocName)
    {
        
        if(CollectionUtils.equals(assocName, "CultureTemplate"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(assocName, "JobTemplate"))
        {
            return true;
        }
        
        if(CollectionUtils.equals(assocName, "AppStatusWorkFlow"))
        {
            return true;
        }
        

        return super.isTransientSingleReference(assocName);
    }
}

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

    public void assertValid ()
    {
    }


    public CultureCriteriaTemplate getCultureTemplate () throws StorageException
    {
        return (CultureCriteriaTemplate)(CultureCriteriaTemplate.DUMMY_CultureCriteriaTemplate);
    }


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

    public Job getJobTemplate () throws StorageException
    {
        return (Job)(Job.DUMMY_Job);
    }


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

    public WorkFlow getAppStatusWorkFlow () throws StorageException
    {
        return (WorkFlow)(WorkFlow.DUMMY_WorkFlow);
    }


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

    public Level getLevel () throws StorageException
    {
        return (Level)(Level.DUMMY_Level);
    }


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

    public Client getClient () throws StorageException
    {
        return (Client)(Client.DUMMY_Client);
    }


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

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


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

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


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

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


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

    public Occupation getOccupation () throws StorageException
    {
        return (Occupation)(Occupation.DUMMY_Occupation);
    }


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

    public ShortenedURL getShortenedURL () throws StorageException
    {
        return (ShortenedURL)(ShortenedURL.DUMMY_ShortenedURL);
    }


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

    public AssessmentCriteriaTemplate getAssessmentTemplate () throws StorageException
    {
        return (AssessmentCriteriaTemplate)(AssessmentCriteriaTemplate.DUMMY_AssessmentCriteriaTemplate);
    }


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

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


    public JobApplication getJobApplicationsAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association JobApplications");
    }


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

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


    public AssessmentCriteria getAssessmentCriteriasAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association AssessmentCriterias");
    }


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

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


    public CultureCriteria getCultureCriteriasAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association CultureCriterias");
    }


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

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


    public WorkFlow getWorkFlowsAt (int index) throws StorageException
    {
        throw new RuntimeException ("No elements in a dummy object in association WorkFlows");
    }


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

}

    
