/*
 * 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 BaseAssessmentCriteriaTemplate extends BaseBusinessClass
{
    // Reference instance for the object
    public static final AssessmentCriteriaTemplate REFERENCE_AssessmentCriteriaTemplate = new AssessmentCriteriaTemplate ();

    // Reference instance for the object
    public static final AssessmentCriteriaTemplate DUMMY_AssessmentCriteriaTemplate = new DummyAssessmentCriteriaTemplate ();

    // Static constants corresponding to field names
    
    public static final String FIELD_TemplateName = "TemplateName";
    public static final String FIELD_JobTitle = "JobTitle";
    public static final String FIELD_JobDescription = "JobDescription";
    public static final String FIELD_ReferenceNumber = "ReferenceNumber";
    public static final String FIELD_GoogleAddressText = "GoogleAddressText";
    public static final String FIELD_ExpectedCandidateRadius = "ExpectedCandidateRadius";
    public static final String FIELD_Remote = "Remote";
    public static final String FIELD_JobType = "JobType";
    public static final String FIELD_Industry = "Industry";
    public static final String FIELD_RequireCV = "RequireCV";
    public static final String FIELD_AssessmentType = "AssessmentType";
    public static final String FIELD_IncludeAssessmentCriteria = "IncludeAssessmentCriteria";
    public static final String FIELD_SuggestedAssessmentType = "SuggestedAssessmentType";
    public static final String SINGLEREFERENCE_Level = "Level";
    public static final String SINGLEREFERENCE_Occupation = "Occupation";
    public static final String SINGLEREFERENCE_JobOwner = "JobOwner";
    public static final String SINGLEREFERENCE_Job = "Job";
    public static final String SINGLEREFERENCE_Client = "Client";
    public static final String SINGLEREFERENCE_HiringTeam = "HiringTeam";
    public static final String SINGLEREFERENCE_CompanyUser = "CompanyUser";
    public static final String SINGLEREFERENCE_ILOJobTitle = "ILOJobTitle";
    public static final String MULTIPLEREFERENCE_AssessmentCriterias = "AssessmentCriterias";
    public static final String BACKREF_AssessmentCriterias = "";
    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";
    

    // Static constants corresponding to attribute helpers
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_TemplateName = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_JobTitle = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_JobDescription = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_ReferenceNumber = DefaultAttributeHelper.INSTANCE;
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_GoogleAddressText = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<AssessmentCriteriaTemplate, LocationRadius> HELPER_ExpectedCandidateRadius =  new EnumeratedAttributeHelper<AssessmentCriteriaTemplate, LocationRadius> (LocationRadius.FACTORY_LocationRadius);
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_Remote = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<AssessmentCriteriaTemplate, JobType> HELPER_JobType =  new EnumeratedAttributeHelper<AssessmentCriteriaTemplate, JobType> (JobType.FACTORY_JobType);
    private static final EnumeratedAttributeHelper<AssessmentCriteriaTemplate, Industry> HELPER_Industry =  new EnumeratedAttributeHelper<AssessmentCriteriaTemplate, Industry> (Industry.FACTORY_Industry);
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_RequireCV = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<AssessmentCriteriaTemplate, AssessmentType> HELPER_AssessmentType =  new EnumeratedAttributeHelper<AssessmentCriteriaTemplate, AssessmentType> (AssessmentType.FACTORY_AssessmentType);
    private static final DefaultAttributeHelper<AssessmentCriteriaTemplate> HELPER_IncludeAssessmentCriteria = DefaultAttributeHelper.INSTANCE;
    private static final EnumeratedAttributeHelper<AssessmentCriteriaTemplate, AssessmentType> HELPER_SuggestedAssessmentType =  new EnumeratedAttributeHelper<AssessmentCriteriaTemplate, AssessmentType> (AssessmentType.FACTORY_AssessmentType);
    

    // Private attributes corresponding to business object data
    private String _TemplateName;
    private String _JobTitle;
    private String _JobDescription;
    private String _ReferenceNumber;
    private String _GoogleAddressText;
    private LocationRadius _ExpectedCandidateRadius;
    private Boolean _Remote;
    private JobType _JobType;
    private Industry _Industry;
    private Boolean _RequireCV;
    private AssessmentType _AssessmentType;
    private Boolean _IncludeAssessmentCriteria;
    private AssessmentType _SuggestedAssessmentType;
    

    // Private attributes corresponding to single references
    private SingleAssociation<AssessmentCriteriaTemplate, Level> _Level;
    private SingleAssociation<AssessmentCriteriaTemplate, Occupation> _Occupation;
    private SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> _JobOwner;
    private SingleAssociation<AssessmentCriteriaTemplate, Job> _Job;
    private SingleAssociation<AssessmentCriteriaTemplate, Client> _Client;
    private SingleAssociation<AssessmentCriteriaTemplate, HiringTeam> _HiringTeam;
    private SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> _CompanyUser;
    private SingleAssociation<AssessmentCriteriaTemplate, ILOJobTitle> _ILOJobTitle;
    

    // Private attributes corresponding to multiple references
    private MultipleAssociation<AssessmentCriteriaTemplate, AssessmentCriteria> _AssessmentCriterias;
    private MultipleAssociation<AssessmentCriteriaTemplate, WorkFlow> _WorkFlows;
    

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

    // Arrays of validators for each attribute
    private static final AttributeValidator[] FIELD_SuggestedAssessmentType_Validators;
    private static final AttributeValidator[] FIELD_TemplateName_Validators;
    private static final AttributeValidator[] FIELD_JobTitle_Validators;
    private static final AttributeValidator[] FIELD_JobDescription_Validators;
    private static final AttributeValidator[] FIELD_ReferenceNumber_Validators;
    private static final AttributeValidator[] FIELD_GoogleAddressText_Validators;
    private static final AttributeValidator[] FIELD_ExpectedCandidateRadius_Validators;
    private static final AttributeValidator[] FIELD_Remote_Validators;
    private static final AttributeValidator[] FIELD_JobType_Validators;
    private static final AttributeValidator[] FIELD_Industry_Validators;
    private static final AttributeValidator[] FIELD_RequireCV_Validators;
    private static final AttributeValidator[] FIELD_AssessmentType_Validators;
    private static final AttributeValidator[] FIELD_IncludeAssessmentCriteria_Validators;
    

    // Arrays of behaviour decorators
    private static final AssessmentCriteriaTemplateBehaviourDecorator[] AssessmentCriteriaTemplate_BehaviourDecorators;
    
    static
    {
        try
        {
            
            String tmp_AssessmentCriterias = AssessmentCriteria.BACKREF_Template;
            String tmp_WorkFlows = WorkFlow.BACKREF_Template;
            
            Map  validatorMapping = ((Map)ConfigMgr.getConfigObject ("CONFIG.ORMVALIDATOR", "ValidatorMapping"));

            setupAssocMetaData_AssessmentCriterias();
            setupAssocMetaData_WorkFlows();
            setupAssocMetaData_Level();
            setupAssocMetaData_Occupation();
            setupAssocMetaData_JobOwner();
            setupAssocMetaData_Job();
            setupAssocMetaData_Client();
            setupAssocMetaData_HiringTeam();
            setupAssocMetaData_CompanyUser();
            setupAssocMetaData_ILOJobTitle();
            FIELD_SuggestedAssessmentType_Validators = (AttributeValidator[])setupAttribMetaData_SuggestedAssessmentType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_TemplateName_Validators = (AttributeValidator[])setupAttribMetaData_TemplateName(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_ReferenceNumber_Validators = (AttributeValidator[])setupAttribMetaData_ReferenceNumber(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_GoogleAddressText_Validators = (AttributeValidator[])setupAttribMetaData_GoogleAddressText(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_ExpectedCandidateRadius_Validators = (AttributeValidator[])setupAttribMetaData_ExpectedCandidateRadius(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Remote_Validators = (AttributeValidator[])setupAttribMetaData_Remote(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_JobType_Validators = (AttributeValidator[])setupAttribMetaData_JobType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_Industry_Validators = (AttributeValidator[])setupAttribMetaData_Industry(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_RequireCV_Validators = (AttributeValidator[])setupAttribMetaData_RequireCV(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_AssessmentType_Validators = (AttributeValidator[])setupAttribMetaData_AssessmentType(validatorMapping).toArray (new AttributeValidator[0]);
            FIELD_IncludeAssessmentCriteria_Validators = (AttributeValidator[])setupAttribMetaData_IncludeAssessmentCriteria(validatorMapping).toArray (new AttributeValidator[0]);
            

            REFERENCE_AssessmentCriteriaTemplate.initialiseReference ();
            DUMMY_AssessmentCriteriaTemplate.initialiseReference ();
            AssessmentCriteriaTemplate_BehaviourDecorators = BaseBusinessClass.getBBCBehaviours(AssessmentCriteriaTemplate.class).toArray(new AssessmentCriteriaTemplateBehaviourDecorator[0]);
        }
        catch (RuntimeException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR1, e, "Error initialising");
            throw e;
        }
    }

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

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

        metaInfo.put ("backreferenceName", "Template");
        metaInfo.put ("name", "WorkFlows");
        metaInfo.put ("type", "WorkFlow");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.WorkFlows:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (MULTIPLEREFERENCE_WorkFlows, 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 AssessmentCriteriaTemplate.Level:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_Level, 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 AssessmentCriteriaTemplate.Occupation:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_Occupation, 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 AssessmentCriteriaTemplate.JobOwner:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_JobOwner, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Job()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "job_id");
        metaInfo.put ("name", "Job");
        metaInfo.put ("type", "Job");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.Job:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_Job, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_Client()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "client_id");
        metaInfo.put ("name", "Client");
        metaInfo.put ("type", "Client");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.Client:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_Client, 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");
        metaInfo.put ("uniqueGroup", "TemplateID");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.HiringTeam:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_HiringTeam, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_CompanyUser()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "company_user_id");
        metaInfo.put ("name", "CompanyUser");
        metaInfo.put ("type", "CompanyUser");
        metaInfo.put ("uniqueGroup", "TemplateID");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.CompanyUser:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_CompanyUser, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static void setupAssocMetaData_ILOJobTitle()
    {
        Map metaInfo = new HashMap ();

        metaInfo.put ("dbcol", "job_title_id");
        metaInfo.put ("mandatory", "true");
        metaInfo.put ("name", "ILOJobTitle");
        metaInfo.put ("type", "ILOJobTitle");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.ILOJobTitle:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (SINGLEREFERENCE_ILOJobTitle, Collections.unmodifiableMap (metaInfo));
    }
    
    
    // Meta Info setup
    private static List setupAttribMetaData_SuggestedAssessmentType(Map validatorMapping)
    {
        Map  metaInfo   = new HashMap ();

        metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
        metaInfo.put ("name", "SuggestedAssessmentType");
        metaInfo.put ("type", "AssessmentType");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.SuggestedAssessmentType:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_SuggestedAssessmentType, Collections.unmodifiableMap (metaInfo));

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

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

        metaInfo.put ("dbcol", "template_name");
        metaInfo.put ("length", "100");
        metaInfo.put ("name", "TemplateName");
        metaInfo.put ("type", "String");
        metaInfo.put ("uniqueGroup", "TemplateID");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.TemplateName:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_TemplateName, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "TemplateName", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.TemplateName:", 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 AssessmentCriteriaTemplate.JobTitle:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_JobTitle, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "JobTitle", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.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 AssessmentCriteriaTemplate.JobDescription:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_JobDescription, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "JobDescription", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.JobDescription:", 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 AssessmentCriteriaTemplate.ReferenceNumber:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_ReferenceNumber, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "ReferenceNumber", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.ReferenceNumber:", 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 ("mandatory", "true");
        metaInfo.put ("name", "GoogleAddressText");
        metaInfo.put ("type", "String");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.GoogleAddressText:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_GoogleAddressText, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "GoogleAddressText", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.GoogleAddressText:", 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 AssessmentCriteriaTemplate.ExpectedCandidateRadius:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_ExpectedCandidateRadius, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "ExpectedCandidateRadius", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.ExpectedCandidateRadius:", 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 AssessmentCriteriaTemplate.Remote:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_Remote, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "Remote", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.Remote:", 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 AssessmentCriteriaTemplate.JobType:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_JobType, Collections.unmodifiableMap (metaInfo));

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

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

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

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "Industry", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.Industry:", 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.FALSE");
        metaInfo.put ("name", "RequireCV");
        metaInfo.put ("type", "Boolean");
        
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for AssessmentCriteriaTemplate.RequireCV:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_RequireCV, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "RequireCV", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.RequireCV:", 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 AssessmentCriteriaTemplate.AssessmentType:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_AssessmentType, Collections.unmodifiableMap (metaInfo));

        List validators = BaseBusinessClass.getAttribValidators(AssessmentCriteriaTemplate.class, "AssessmentType", metaInfo, validatorMapping);
        LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for AssessmentCriteriaTemplate.AssessmentType:", 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 AssessmentCriteriaTemplate.IncludeAssessmentCriteria:", metaInfo);
        ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.put (FIELD_IncludeAssessmentCriteria, Collections.unmodifiableMap (metaInfo));

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

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


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


    


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

        
        _TemplateName = (String)(HELPER_TemplateName.initialise (_TemplateName));
        _JobTitle = (String)(HELPER_JobTitle.initialise (_JobTitle));
        _JobDescription = (String)(HELPER_JobDescription.initialise (_JobDescription));
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.initialise (_ReferenceNumber));
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.initialise (_GoogleAddressText));
        _ExpectedCandidateRadius = (LocationRadius)(LocationRadius.KM100);
        _Remote = (Boolean)(Boolean.FALSE);
        _JobType = (JobType)(JobType.FULL_TIME);
        _Industry = (Industry)(HELPER_Industry.initialise (_Industry));
        _RequireCV = (Boolean)(Boolean.FALSE);
        _AssessmentType = (AssessmentType)(AssessmentType.COMPREHENSIVE);
        _IncludeAssessmentCriteria = (Boolean)(Boolean.TRUE);
        _SuggestedAssessmentType = (AssessmentType)(HELPER_SuggestedAssessmentType.initialise (_SuggestedAssessmentType));
    }


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

        _Level = new SingleAssociation<AssessmentCriteriaTemplate, Level> (this, SINGLEREFERENCE_Level, null, Level.REFERENCE_Level, "tl_assessment_template");
        _Occupation = new SingleAssociation<AssessmentCriteriaTemplate, Occupation> (this, SINGLEREFERENCE_Occupation, null, Occupation.REFERENCE_Occupation, "tl_assessment_template");
        _JobOwner = new SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> (this, SINGLEREFERENCE_JobOwner, null, CompanyUser.REFERENCE_CompanyUser, "tl_assessment_template");
        _Job = new SingleAssociation<AssessmentCriteriaTemplate, Job> (this, SINGLEREFERENCE_Job, null, Job.REFERENCE_Job, "tl_assessment_template");
        _Client = new SingleAssociation<AssessmentCriteriaTemplate, Client> (this, SINGLEREFERENCE_Client, null, Client.REFERENCE_Client, "tl_assessment_template");
        _HiringTeam = new SingleAssociation<AssessmentCriteriaTemplate, HiringTeam> (this, SINGLEREFERENCE_HiringTeam, null, HiringTeam.REFERENCE_HiringTeam, "tl_assessment_template");
        _CompanyUser = new SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> (this, SINGLEREFERENCE_CompanyUser, null, CompanyUser.REFERENCE_CompanyUser, "tl_assessment_template");
        _ILOJobTitle = new SingleAssociation<AssessmentCriteriaTemplate, ILOJobTitle> (this, SINGLEREFERENCE_ILOJobTitle, null, ILOJobTitle.REFERENCE_ILOJobTitle, "tl_assessment_template");
        _AssessmentCriterias = new MultipleAssociation<AssessmentCriteriaTemplate, AssessmentCriteria> (this, MULTIPLEREFERENCE_AssessmentCriterias, AssessmentCriteria.SINGLEREFERENCE_Template, AssessmentCriteria.REFERENCE_AssessmentCriteria);
        _WorkFlows = new MultipleAssociation<AssessmentCriteriaTemplate, WorkFlow> (this, MULTIPLEREFERENCE_WorkFlows, WorkFlow.SINGLEREFERENCE_Template, WorkFlow.REFERENCE_WorkFlow);
        
    }


    // Initialise the associations
    protected BaseBusinessClass initialiseReference ()
    {
        super.initialiseReference ();
        
        _Level = new SingleAssociation<AssessmentCriteriaTemplate, Level> (this, SINGLEREFERENCE_Level, null, Level.REFERENCE_Level, "tl_assessment_template");
        _Occupation = new SingleAssociation<AssessmentCriteriaTemplate, Occupation> (this, SINGLEREFERENCE_Occupation, null, Occupation.REFERENCE_Occupation, "tl_assessment_template");
        _JobOwner = new SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> (this, SINGLEREFERENCE_JobOwner, null, CompanyUser.REFERENCE_CompanyUser, "tl_assessment_template");
        _Job = new SingleAssociation<AssessmentCriteriaTemplate, Job> (this, SINGLEREFERENCE_Job, null, Job.REFERENCE_Job, "tl_assessment_template");
        _Client = new SingleAssociation<AssessmentCriteriaTemplate, Client> (this, SINGLEREFERENCE_Client, null, Client.REFERENCE_Client, "tl_assessment_template");
        _HiringTeam = new SingleAssociation<AssessmentCriteriaTemplate, HiringTeam> (this, SINGLEREFERENCE_HiringTeam, null, HiringTeam.REFERENCE_HiringTeam, "tl_assessment_template");
        _CompanyUser = new SingleAssociation<AssessmentCriteriaTemplate, CompanyUser> (this, SINGLEREFERENCE_CompanyUser, null, CompanyUser.REFERENCE_CompanyUser, "tl_assessment_template");
        _ILOJobTitle = new SingleAssociation<AssessmentCriteriaTemplate, ILOJobTitle> (this, SINGLEREFERENCE_ILOJobTitle, null, ILOJobTitle.REFERENCE_ILOJobTitle, "tl_assessment_template");
        _AssessmentCriterias = new MultipleAssociation<AssessmentCriteriaTemplate, AssessmentCriteria> (this, MULTIPLEREFERENCE_AssessmentCriterias, AssessmentCriteria.SINGLEREFERENCE_Template, AssessmentCriteria.REFERENCE_AssessmentCriteria);
        _WorkFlows = new MultipleAssociation<AssessmentCriteriaTemplate, WorkFlow> (this, MULTIPLEREFERENCE_WorkFlows, WorkFlow.SINGLEREFERENCE_Template, WorkFlow.REFERENCE_WorkFlow);
        
        
        return this;
    }

    

    /**
     * Get the attribute TemplateName
     */
    public String getTemplateName ()
    {
        assertValid();
        String valToReturn = _TemplateName;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getTemplateName ((AssessmentCriteriaTemplate)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 preTemplateNameChange (String newTemplateName) 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 postTemplateNameChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute TemplateName.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setTemplateName (String newTemplateName) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_TemplateName.compare (_TemplateName, newTemplateName);
        
        try
        {
            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newTemplateName = bhd.setTemplateName ((AssessmentCriteriaTemplate)this, newTemplateName);
                oldAndNewIdentical = HELPER_TemplateName.compare (_TemplateName, newTemplateName);
            }

            

            if (FIELD_TemplateName_Validators.length > 0)
            {
                Object newTemplateNameObj = HELPER_TemplateName.toObject (newTemplateName);

                if (newTemplateNameObj != null)
                {
                    int     loopMax = FIELD_TemplateName_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.get (FIELD_TemplateName);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_TemplateName () != FieldWriteability.FALSE, "Field  TemplateName is not writeable");
            preTemplateNameChange (newTemplateName);
            markFieldChange (FIELD_TemplateName);
            _TemplateName = newTemplateName;            
            postFieldChange (FIELD_TemplateName);
            postTemplateNameChange ();
        }
    }

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

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getJobTitle ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newJobTitle = bhd.setJobTitle ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getJobDescription ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newJobDescription = bhd.setJobDescription ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 ReferenceNumber
     */
    public String getReferenceNumber ()
    {
        assertValid();
        String valToReturn = _ReferenceNumber;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getReferenceNumber ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newReferenceNumber = bhd.setReferenceNumber ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 GoogleAddressText
     */
    public String getGoogleAddressText ()
    {
        assertValid();
        String valToReturn = _GoogleAddressText;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getGoogleAddressText ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newGoogleAddressText = bhd.setGoogleAddressText ((AssessmentCriteriaTemplate)this, newGoogleAddressText);
                oldAndNewIdentical = HELPER_GoogleAddressText.compare (_GoogleAddressText, newGoogleAddressText);
            }

            BusinessObjectParser.assertFieldCondition (newGoogleAddressText != null, this, FIELD_GoogleAddressText, "mandatory");
            

            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_AssessmentCriteriaTemplate.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 ExpectedCandidateRadius
     */
    public LocationRadius getExpectedCandidateRadius ()
    {
        assertValid();
        LocationRadius valToReturn = _ExpectedCandidateRadius;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getExpectedCandidateRadius ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newExpectedCandidateRadius = bhd.setExpectedCandidateRadius ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 Remote
     */
    public Boolean getRemote ()
    {
        assertValid();
        Boolean valToReturn = _Remote;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getRemote ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newRemote = bhd.setRemote ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 JobType
     */
    public JobType getJobType ()
    {
        assertValid();
        JobType valToReturn = _JobType;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getJobType ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newJobType = bhd.setJobType ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 Industry
     */
    public Industry getIndustry ()
    {
        assertValid();
        Industry valToReturn = _Industry;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getIndustry ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newIndustry = bhd.setIndustry ((AssessmentCriteriaTemplate)this, newIndustry);
                oldAndNewIdentical = HELPER_Industry.compare (_Industry, newIndustry);
            }

            BusinessObjectParser.assertFieldCondition (newIndustry != null, this, FIELD_Industry, "mandatory");
            

            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_AssessmentCriteriaTemplate.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 RequireCV
     */
    public Boolean getRequireCV ()
    {
        assertValid();
        Boolean valToReturn = _RequireCV;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getRequireCV ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newRequireCV = bhd.setRequireCV ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 AssessmentType
     */
    public AssessmentType getAssessmentType ()
    {
        assertValid();
        AssessmentType valToReturn = _AssessmentType;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getAssessmentType ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newAssessmentType = bhd.setAssessmentType ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 IncludeAssessmentCriteria
     */
    public Boolean getIncludeAssessmentCriteria ()
    {
        assertValid();
        Boolean valToReturn = _IncludeAssessmentCriteria;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getIncludeAssessmentCriteria ((AssessmentCriteriaTemplate)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 (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newIncludeAssessmentCriteria = bhd.setIncludeAssessmentCriteria ((AssessmentCriteriaTemplate)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_AssessmentCriteriaTemplate.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 SuggestedAssessmentType
     */
    public AssessmentType getSuggestedAssessmentType ()
    {
        assertValid();
        AssessmentType valToReturn = _SuggestedAssessmentType;

            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                valToReturn = bhd.getSuggestedAssessmentType ((AssessmentCriteriaTemplate)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 preSuggestedAssessmentTypeChange (AssessmentType newSuggestedAssessmentType) 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 postSuggestedAssessmentTypeChange () throws FieldException
    {
    }

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

    /**
     * Set the attribute SuggestedAssessmentType.  Checks to ensure a new value
     * has been supplied.  If so, marks the field as altered and sets the attribute.
     */
    public void setSuggestedAssessmentType (AssessmentType newSuggestedAssessmentType) throws FieldException
    {
        boolean oldAndNewIdentical = HELPER_SuggestedAssessmentType.compare (_SuggestedAssessmentType, newSuggestedAssessmentType);
        
        try
        {
            for (AssessmentCriteriaTemplateBehaviourDecorator bhd : AssessmentCriteriaTemplate_BehaviourDecorators)
            {
                newSuggestedAssessmentType = bhd.setSuggestedAssessmentType ((AssessmentCriteriaTemplate)this, newSuggestedAssessmentType);
                oldAndNewIdentical = HELPER_SuggestedAssessmentType.compare (_SuggestedAssessmentType, newSuggestedAssessmentType);
            }

            

            if (FIELD_SuggestedAssessmentType_Validators.length > 0)
            {
                Object newSuggestedAssessmentTypeObj = HELPER_SuggestedAssessmentType.toObject (newSuggestedAssessmentType);

                if (newSuggestedAssessmentTypeObj != null)
                {
                    int     loopMax = FIELD_SuggestedAssessmentType_Validators.length;
                    Map     metadata = (Map)ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.get (FIELD_SuggestedAssessmentType);

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

        if (!oldAndNewIdentical)
        {
            assertValid();
            Debug.assertion (getWriteability_SuggestedAssessmentType () != FieldWriteability.FALSE, "Field  SuggestedAssessmentType is not writeable");
            preSuggestedAssessmentTypeChange (newSuggestedAssessmentType);
            markFieldChange (FIELD_SuggestedAssessmentType);
            _SuggestedAssessmentType = newSuggestedAssessmentType;            
            postFieldChange (FIELD_SuggestedAssessmentType);
            postSuggestedAssessmentTypeChange ();
        }
    }



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

        
        result.add("Level");
        
        result.add("Occupation");
        
        result.add("JobOwner");
        
        result.add("Job");
        
        result.add("Client");
        
        result.add("HiringTeam");
        
        result.add("CompanyUser");
        
        result.add("ILOJobTitle");
        

        return result;
    }
    
    
    public BaseBusinessClass getSingleAssocReferenceInstance (String assocName)
    {
        if (assocName == null)
        {
            throw new RuntimeException ("Game over == null!");
        }
        else if (assocName.equals (SINGLEREFERENCE_Level))
        {
            return _Level.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return _Occupation.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return _JobOwner.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            return _Job.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return _Client.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return _HiringTeam.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return _CompanyUser.getReferencedType ();
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return _ILOJobTitle.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_Occupation))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return null ;
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            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_Level))
        {
            return getLevel ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupation ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwner ();
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            return getJob ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClient ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeam ();
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return getCompanyUser ();
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return getILOJobTitle ();
        }
        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_Level))
        {
            return getLevel (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupation (getType);
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwner (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            return getJob (getType);
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClient (getType);
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeam (getType);
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return getCompanyUser (getType);
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return getILOJobTitle (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_Level))
        {
            return getLevelID ();
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            return getOccupationID ();
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getJobOwnerID ();
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            return getJobID ();
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            return getClientID ();
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getHiringTeamID ();
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return getCompanyUserID ();
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return getILOJobTitleID ();
        }
        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_Level))
        {
            setLevel ((Level)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Occupation))
        {
            setOccupation ((Occupation)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_JobOwner))
        {
            setJobOwner ((CompanyUser)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Job))
        {
            setJob ((Job)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_Client))
        {
            setClient ((Client)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_HiringTeam))
        {
            setHiringTeam ((HiringTeam)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_CompanyUser))
        {
            setCompanyUser ((CompanyUser)(newValue));
        }else if (assocName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            setILOJobTitle ((ILOJobTitle)(newValue));
        }
        else
        {
            super.setSingleAssoc (assocName, newValue);
        }
    }



    /**
     * 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 AssessmentCriteriaTemplate:", 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 Occupation
     */
    public Occupation getOccupation () throws StorageException
    {
        assertValid();
        
        try
        {
            return (Occupation)(_Occupation.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in AssessmentCriteriaTemplate:", 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 JobOwner
     */
    public CompanyUser getJobOwner () throws StorageException
    {
        assertValid();
        
        try
        {
            return (CompanyUser)(_JobOwner.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in AssessmentCriteriaTemplate:", 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 Job
     */
    public Job getJob () throws StorageException
    {
        assertValid();
        
        try
        {
            return (Job)(_Job.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in AssessmentCriteriaTemplate:", this.getObjectID (), ", was trying to get Job:",  getJobID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _Job.get ().getClass ());
            throw e;
        }
    }


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getJobID ()
    {
        assertValid();
        
        if (_Job == null)
        {
            return null;
        }
        else
        {
            return _Job.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 preJobChange (Job newJob) 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 postJobChange () throws FieldException
    {
    }



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

        if (_Job.wouldReferencedChange (newJob))
        {
            assertValid();
            Debug.assertion (getWriteability_Job () != FieldWriteability.FALSE, "Assoc Job is not writeable");
            preJobChange (newJob);
            
                    _Job.set (newJob);
                
            postJobChange ();
        }
    }

    /**
     * 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 AssessmentCriteriaTemplate:", 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.set (newClient);
                
            postClientChange ();
        }
    }

    /**
     * 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 AssessmentCriteriaTemplate:", 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 CompanyUser
     */
    public CompanyUser getCompanyUser () throws StorageException
    {
        assertValid();
        
        try
        {
            return (CompanyUser)(_CompanyUser.get ());
        }
        catch (ClassCastException e)
        {
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in AssessmentCriteriaTemplate:", this.getObjectID (), ", was trying to get CompanyUser:",  getCompanyUserID ());
            LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _CompanyUser.get ().getClass ());
            throw e;
        }
    }


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getCompanyUserID ()
    {
        assertValid();
        
        if (_CompanyUser == null)
        {
            return null;
        }
        else
        {
            return _CompanyUser.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 preCompanyUserChange (CompanyUser newCompanyUser) 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 postCompanyUserChange () throws FieldException
    {
    }



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

        if (_CompanyUser.wouldReferencedChange (newCompanyUser))
        {
            assertValid();
            Debug.assertion (getWriteability_CompanyUser () != FieldWriteability.FALSE, "Assoc CompanyUser is not writeable");
            preCompanyUserChange (newCompanyUser);
            
                    _CompanyUser.set (newCompanyUser);
                
            postCompanyUserChange ();
        }
    }

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


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


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getILOJobTitleID ()
    {
        assertValid();
        
        if (_ILOJobTitle == null)
        {
            return null;
        }
        else
        {
            return _ILOJobTitle.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 preILOJobTitleChange (ILOJobTitle newILOJobTitle) 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 postILOJobTitleChange () throws FieldException
    {
    }



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

        if (_ILOJobTitle.wouldReferencedChange (newILOJobTitle))
        {
            assertValid();
            Debug.assertion (getWriteability_ILOJobTitle () != FieldWriteability.FALSE, "Assoc ILOJobTitle is not writeable");
            preILOJobTitleChange (newILOJobTitle);
            
                    _ILOJobTitle.set (newILOJobTitle);
                
            postILOJobTitleChange ();
        }
    }

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

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

        return result;
    }


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

        return super.getMultiAssocReferenceInstance(attribName);
    }


    public String getMultiAssocBackReference(String attribName)
    {
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return AssessmentCriteria.SINGLEREFERENCE_Template ;
        }
        
        if (MULTIPLEREFERENCE_WorkFlows.equals(attribName))
        {
            return WorkFlow.SINGLEREFERENCE_Template ;
        }
        

        return super.getMultiAssocBackReference(attribName);
    }


    /**
     * Get the assoc count for the multi assoc name.
     */
    public int getMultiAssocCount(String attribName) throws StorageException
    {
        
        if (MULTIPLEREFERENCE_AssessmentCriterias.equals(attribName))
        {
            return this.getAssessmentCriteriasCount();
        }
        
        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_AssessmentCriterias.equals(attribName))
        {
            return this.getAssessmentCriteriasAt(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_AssessmentCriterias.equals(attribName))
        {
            addToAssessmentCriterias((AssessmentCriteria)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_AssessmentCriterias.equals(attribName))
        {
            removeFromAssessmentCriterias((AssessmentCriteria)oldElement);

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

            return;
        }
        

        super.removeFromMultiAssoc(attribName, oldElement);
    }


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

        super.__loadMultiAssoc(attribName, elements);
    }


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

        return super.__isMultiAssocLoaded(attribName);
    }

    

    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.getTemplate () != this)
                {
                    newElement.setTemplate ((AssessmentCriteriaTemplate)(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.getTemplate () != null)
                {
                    elementToRemove.setTemplate (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_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.getTemplate () != this)
                {
                    newElement.setTemplate ((AssessmentCriteriaTemplate)(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.getTemplate () != null)
                {
                    elementToRemove.setTemplate (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 
        {
            for(AssessmentCriteria referenced : CollectionUtils.reverse(getAssessmentCriteriasSet()))
            { 
                LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Setting backreference to null Template from ", getObjectID (), " to ", referenced.getObjectID ());
                referenced.setTemplate(null);
            }

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

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

        super.onDelete ();
    }


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


    public AssessmentCriteriaTemplate referenceInstance ()
    {
        return REFERENCE_AssessmentCriteriaTemplate;
    }


    public AssessmentCriteriaTemplate getInTransaction (ObjectTransaction t) throws StorageException
    {
        return getAssessmentCriteriaTemplateByID (t, getObjectID());
    }
    
    
    public BaseBusinessClass dummyInstance ()
    {
        return DUMMY_AssessmentCriteriaTemplate;
    }


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





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

        tl_assessment_templatePSet.setAttrib (FIELD_ObjectID, myID);
        tl_assessment_templatePSet.setAttrib (FIELD_TemplateName, HELPER_TemplateName.toObject (_TemplateName)); //
        tl_assessment_templatePSet.setAttrib (FIELD_JobTitle, HELPER_JobTitle.toObject (_JobTitle)); //
        tl_assessment_templatePSet.setAttrib (FIELD_JobDescription, HELPER_JobDescription.toObject (_JobDescription)); //
        tl_assessment_templatePSet.setAttrib (FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject (_ReferenceNumber)); //
        tl_assessment_templatePSet.setAttrib (FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject (_GoogleAddressText)); //
        tl_assessment_templatePSet.setAttrib (FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject (_ExpectedCandidateRadius)); //
        tl_assessment_templatePSet.setAttrib (FIELD_Remote, HELPER_Remote.toObject (_Remote)); //
        tl_assessment_templatePSet.setAttrib (FIELD_JobType, HELPER_JobType.toObject (_JobType)); //
        tl_assessment_templatePSet.setAttrib (FIELD_Industry, HELPER_Industry.toObject (_Industry)); //
        tl_assessment_templatePSet.setAttrib (FIELD_RequireCV, HELPER_RequireCV.toObject (_RequireCV)); //
        tl_assessment_templatePSet.setAttrib (FIELD_AssessmentType, HELPER_AssessmentType.toObject (_AssessmentType)); //
        tl_assessment_templatePSet.setAttrib (FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject (_IncludeAssessmentCriteria)); //
        _Level.getPersistentSets (allSets);
        _Occupation.getPersistentSets (allSets);
        _JobOwner.getPersistentSets (allSets);
        _Job.getPersistentSets (allSets);
        _Client.getPersistentSets (allSets);
        _HiringTeam.getPersistentSets (allSets);
        _CompanyUser.getPersistentSets (allSets);
        _ILOJobTitle.getPersistentSets (allSets);
        
    }


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

        
        PersistentSet   tl_assessment_templatePSet = allSets.getPersistentSet (objectID, "tl_assessment_template");

        _TemplateName = (String)(HELPER_TemplateName.fromObject (_TemplateName, tl_assessment_templatePSet.getAttrib (FIELD_TemplateName))); //
        _JobTitle = (String)(HELPER_JobTitle.fromObject (_JobTitle, tl_assessment_templatePSet.getAttrib (FIELD_JobTitle))); //
        _JobDescription = (String)(HELPER_JobDescription.fromObject (_JobDescription, tl_assessment_templatePSet.getAttrib (FIELD_JobDescription))); //
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.fromObject (_ReferenceNumber, tl_assessment_templatePSet.getAttrib (FIELD_ReferenceNumber))); //
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.fromObject (_GoogleAddressText, tl_assessment_templatePSet.getAttrib (FIELD_GoogleAddressText))); //
        _ExpectedCandidateRadius = (LocationRadius)(HELPER_ExpectedCandidateRadius.fromObject (_ExpectedCandidateRadius, tl_assessment_templatePSet.getAttrib (FIELD_ExpectedCandidateRadius))); //
        _Remote = (Boolean)(HELPER_Remote.fromObject (_Remote, tl_assessment_templatePSet.getAttrib (FIELD_Remote))); //
        _JobType = (JobType)(HELPER_JobType.fromObject (_JobType, tl_assessment_templatePSet.getAttrib (FIELD_JobType))); //
        _Industry = (Industry)(HELPER_Industry.fromObject (_Industry, tl_assessment_templatePSet.getAttrib (FIELD_Industry))); //
        _RequireCV = (Boolean)(HELPER_RequireCV.fromObject (_RequireCV, tl_assessment_templatePSet.getAttrib (FIELD_RequireCV))); //
        _AssessmentType = (AssessmentType)(HELPER_AssessmentType.fromObject (_AssessmentType, tl_assessment_templatePSet.getAttrib (FIELD_AssessmentType))); //
        _IncludeAssessmentCriteria = (Boolean)(HELPER_IncludeAssessmentCriteria.fromObject (_IncludeAssessmentCriteria, tl_assessment_templatePSet.getAttrib (FIELD_IncludeAssessmentCriteria))); //
        _Level.setFromPersistentSets (objectID, allSets);
        _Occupation.setFromPersistentSets (objectID, allSets);
        _JobOwner.setFromPersistentSets (objectID, allSets);
        _Job.setFromPersistentSets (objectID, allSets);
        _Client.setFromPersistentSets (objectID, allSets);
        _HiringTeam.setFromPersistentSets (objectID, allSets);
        _CompanyUser.setFromPersistentSets (objectID, allSets);
        _ILOJobTitle.setFromPersistentSets (objectID, allSets);
        
    }





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

        if (other instanceof AssessmentCriteriaTemplate)
        {
            AssessmentCriteriaTemplate otherAssessmentCriteriaTemplate = (AssessmentCriteriaTemplate)other;
            
            try
            {
                setTemplateName (otherAssessmentCriteriaTemplate.getTemplateName ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobTitle (otherAssessmentCriteriaTemplate.getJobTitle ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobDescription (otherAssessmentCriteriaTemplate.getJobDescription ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setReferenceNumber (otherAssessmentCriteriaTemplate.getReferenceNumber ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setGoogleAddressText (otherAssessmentCriteriaTemplate.getGoogleAddressText ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setExpectedCandidateRadius (otherAssessmentCriteriaTemplate.getExpectedCandidateRadius ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setRemote (otherAssessmentCriteriaTemplate.getRemote ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setJobType (otherAssessmentCriteriaTemplate.getJobType ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIndustry (otherAssessmentCriteriaTemplate.getIndustry ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setRequireCV (otherAssessmentCriteriaTemplate.getRequireCV ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setAssessmentType (otherAssessmentCriteriaTemplate.getAssessmentType ());
            }
            catch (FieldException ex)
            {
                e.addException (ex);
            }
            
            try
            {
                setIncludeAssessmentCriteria (otherAssessmentCriteriaTemplate.getIncludeAssessmentCriteria ());
            }
            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 BaseAssessmentCriteriaTemplate)
        {
            BaseAssessmentCriteriaTemplate sourceAssessmentCriteriaTemplate = (BaseAssessmentCriteriaTemplate)(source);

            _TemplateName = sourceAssessmentCriteriaTemplate._TemplateName;
            _JobTitle = sourceAssessmentCriteriaTemplate._JobTitle;
            _JobDescription = sourceAssessmentCriteriaTemplate._JobDescription;
            _ReferenceNumber = sourceAssessmentCriteriaTemplate._ReferenceNumber;
            _GoogleAddressText = sourceAssessmentCriteriaTemplate._GoogleAddressText;
            _ExpectedCandidateRadius = sourceAssessmentCriteriaTemplate._ExpectedCandidateRadius;
            _Remote = sourceAssessmentCriteriaTemplate._Remote;
            _JobType = sourceAssessmentCriteriaTemplate._JobType;
            _Industry = sourceAssessmentCriteriaTemplate._Industry;
            _RequireCV = sourceAssessmentCriteriaTemplate._RequireCV;
            _AssessmentType = sourceAssessmentCriteriaTemplate._AssessmentType;
            _IncludeAssessmentCriteria = sourceAssessmentCriteriaTemplate._IncludeAssessmentCriteria;
            _SuggestedAssessmentType = sourceAssessmentCriteriaTemplate._SuggestedAssessmentType;
            
        }
    }


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

            _Level.copyFrom (sourceAssessmentCriteriaTemplate._Level, linkToGhosts);
            _Occupation.copyFrom (sourceAssessmentCriteriaTemplate._Occupation, linkToGhosts);
            _JobOwner.copyFrom (sourceAssessmentCriteriaTemplate._JobOwner, linkToGhosts);
            _Job.copyFrom (sourceAssessmentCriteriaTemplate._Job, linkToGhosts);
            _Client.copyFrom (sourceAssessmentCriteriaTemplate._Client, linkToGhosts);
            _HiringTeam.copyFrom (sourceAssessmentCriteriaTemplate._HiringTeam, linkToGhosts);
            _CompanyUser.copyFrom (sourceAssessmentCriteriaTemplate._CompanyUser, linkToGhosts);
            _ILOJobTitle.copyFrom (sourceAssessmentCriteriaTemplate._ILOJobTitle, 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 BaseAssessmentCriteriaTemplate)
        {
            BaseAssessmentCriteriaTemplate sourceAssessmentCriteriaTemplate = (BaseAssessmentCriteriaTemplate)(source);

            _AssessmentCriterias.copyFrom (sourceAssessmentCriteriaTemplate._AssessmentCriterias, linkToGhosts);
            _WorkFlows.copyFrom (sourceAssessmentCriteriaTemplate._WorkFlows, linkToGhosts);
            
        }
    }


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

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


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

        _TemplateName = (String)(HELPER_TemplateName.readExternal (_TemplateName, vals.get(FIELD_TemplateName))); //
        _JobTitle = (String)(HELPER_JobTitle.readExternal (_JobTitle, vals.get(FIELD_JobTitle))); //
        _JobDescription = (String)(HELPER_JobDescription.readExternal (_JobDescription, vals.get(FIELD_JobDescription))); //
        _ReferenceNumber = (String)(HELPER_ReferenceNumber.readExternal (_ReferenceNumber, vals.get(FIELD_ReferenceNumber))); //
        _GoogleAddressText = (String)(HELPER_GoogleAddressText.readExternal (_GoogleAddressText, vals.get(FIELD_GoogleAddressText))); //
        _ExpectedCandidateRadius = (LocationRadius)(HELPER_ExpectedCandidateRadius.readExternal (_ExpectedCandidateRadius, vals.get(FIELD_ExpectedCandidateRadius))); //
        _Remote = (Boolean)(HELPER_Remote.readExternal (_Remote, vals.get(FIELD_Remote))); //
        _JobType = (JobType)(HELPER_JobType.readExternal (_JobType, vals.get(FIELD_JobType))); //
        _Industry = (Industry)(HELPER_Industry.readExternal (_Industry, vals.get(FIELD_Industry))); //
        _RequireCV = (Boolean)(HELPER_RequireCV.readExternal (_RequireCV, vals.get(FIELD_RequireCV))); //
        _AssessmentType = (AssessmentType)(HELPER_AssessmentType.readExternal (_AssessmentType, vals.get(FIELD_AssessmentType))); //
        _IncludeAssessmentCriteria = (Boolean)(HELPER_IncludeAssessmentCriteria.readExternal (_IncludeAssessmentCriteria, vals.get(FIELD_IncludeAssessmentCriteria))); //
        _SuggestedAssessmentType = (AssessmentType)(HELPER_SuggestedAssessmentType.readExternal (_SuggestedAssessmentType, vals.get(FIELD_SuggestedAssessmentType))); //
        _Level.readExternalData(vals.get(SINGLEREFERENCE_Level));
        _Occupation.readExternalData(vals.get(SINGLEREFERENCE_Occupation));
        _JobOwner.readExternalData(vals.get(SINGLEREFERENCE_JobOwner));
        _Job.readExternalData(vals.get(SINGLEREFERENCE_Job));
        _Client.readExternalData(vals.get(SINGLEREFERENCE_Client));
        _HiringTeam.readExternalData(vals.get(SINGLEREFERENCE_HiringTeam));
        _CompanyUser.readExternalData(vals.get(SINGLEREFERENCE_CompanyUser));
        _ILOJobTitle.readExternalData(vals.get(SINGLEREFERENCE_ILOJobTitle));
        _AssessmentCriterias.readExternalData(vals.get(MULTIPLEREFERENCE_AssessmentCriterias));
        _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_TemplateName, HELPER_TemplateName.writeExternal (_TemplateName));
        vals.put (FIELD_JobTitle, HELPER_JobTitle.writeExternal (_JobTitle));
        vals.put (FIELD_JobDescription, HELPER_JobDescription.writeExternal (_JobDescription));
        vals.put (FIELD_ReferenceNumber, HELPER_ReferenceNumber.writeExternal (_ReferenceNumber));
        vals.put (FIELD_GoogleAddressText, HELPER_GoogleAddressText.writeExternal (_GoogleAddressText));
        vals.put (FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.writeExternal (_ExpectedCandidateRadius));
        vals.put (FIELD_Remote, HELPER_Remote.writeExternal (_Remote));
        vals.put (FIELD_JobType, HELPER_JobType.writeExternal (_JobType));
        vals.put (FIELD_Industry, HELPER_Industry.writeExternal (_Industry));
        vals.put (FIELD_RequireCV, HELPER_RequireCV.writeExternal (_RequireCV));
        vals.put (FIELD_AssessmentType, HELPER_AssessmentType.writeExternal (_AssessmentType));
        vals.put (FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.writeExternal (_IncludeAssessmentCriteria));
        vals.put (FIELD_SuggestedAssessmentType, HELPER_SuggestedAssessmentType.writeExternal (_SuggestedAssessmentType));
        vals.put (SINGLEREFERENCE_Level, _Level.writeExternalData());
        vals.put (SINGLEREFERENCE_Occupation, _Occupation.writeExternalData());
        vals.put (SINGLEREFERENCE_JobOwner, _JobOwner.writeExternalData());
        vals.put (SINGLEREFERENCE_Job, _Job.writeExternalData());
        vals.put (SINGLEREFERENCE_Client, _Client.writeExternalData());
        vals.put (SINGLEREFERENCE_HiringTeam, _HiringTeam.writeExternalData());
        vals.put (SINGLEREFERENCE_CompanyUser, _CompanyUser.writeExternalData());
        vals.put (SINGLEREFERENCE_ILOJobTitle, _ILOJobTitle.writeExternalData());
        vals.put (MULTIPLEREFERENCE_AssessmentCriterias, _AssessmentCriterias.writeExternalData());
        vals.put (MULTIPLEREFERENCE_WorkFlows, _WorkFlows.writeExternalData());
        
    }


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

        if (other instanceof BaseAssessmentCriteriaTemplate)
        {
            BaseAssessmentCriteriaTemplate otherAssessmentCriteriaTemplate = (BaseAssessmentCriteriaTemplate)(other);

            
            if (!HELPER_TemplateName.compare(this._TemplateName, otherAssessmentCriteriaTemplate._TemplateName))
            {
                listener.notifyFieldChange(this, other, FIELD_TemplateName, HELPER_TemplateName.toObject(this._TemplateName), HELPER_TemplateName.toObject(otherAssessmentCriteriaTemplate._TemplateName));
            }
            if (!HELPER_JobTitle.compare(this._JobTitle, otherAssessmentCriteriaTemplate._JobTitle))
            {
                listener.notifyFieldChange(this, other, FIELD_JobTitle, HELPER_JobTitle.toObject(this._JobTitle), HELPER_JobTitle.toObject(otherAssessmentCriteriaTemplate._JobTitle));
            }
            if (!HELPER_JobDescription.compare(this._JobDescription, otherAssessmentCriteriaTemplate._JobDescription))
            {
                listener.notifyFieldChange(this, other, FIELD_JobDescription, HELPER_JobDescription.toObject(this._JobDescription), HELPER_JobDescription.toObject(otherAssessmentCriteriaTemplate._JobDescription));
            }
            if (!HELPER_ReferenceNumber.compare(this._ReferenceNumber, otherAssessmentCriteriaTemplate._ReferenceNumber))
            {
                listener.notifyFieldChange(this, other, FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject(this._ReferenceNumber), HELPER_ReferenceNumber.toObject(otherAssessmentCriteriaTemplate._ReferenceNumber));
            }
            if (!HELPER_GoogleAddressText.compare(this._GoogleAddressText, otherAssessmentCriteriaTemplate._GoogleAddressText))
            {
                listener.notifyFieldChange(this, other, FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject(this._GoogleAddressText), HELPER_GoogleAddressText.toObject(otherAssessmentCriteriaTemplate._GoogleAddressText));
            }
            if (!HELPER_ExpectedCandidateRadius.compare(this._ExpectedCandidateRadius, otherAssessmentCriteriaTemplate._ExpectedCandidateRadius))
            {
                listener.notifyFieldChange(this, other, FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject(this._ExpectedCandidateRadius), HELPER_ExpectedCandidateRadius.toObject(otherAssessmentCriteriaTemplate._ExpectedCandidateRadius));
            }
            if (!HELPER_Remote.compare(this._Remote, otherAssessmentCriteriaTemplate._Remote))
            {
                listener.notifyFieldChange(this, other, FIELD_Remote, HELPER_Remote.toObject(this._Remote), HELPER_Remote.toObject(otherAssessmentCriteriaTemplate._Remote));
            }
            if (!HELPER_JobType.compare(this._JobType, otherAssessmentCriteriaTemplate._JobType))
            {
                listener.notifyFieldChange(this, other, FIELD_JobType, HELPER_JobType.toObject(this._JobType), HELPER_JobType.toObject(otherAssessmentCriteriaTemplate._JobType));
            }
            if (!HELPER_Industry.compare(this._Industry, otherAssessmentCriteriaTemplate._Industry))
            {
                listener.notifyFieldChange(this, other, FIELD_Industry, HELPER_Industry.toObject(this._Industry), HELPER_Industry.toObject(otherAssessmentCriteriaTemplate._Industry));
            }
            if (!HELPER_RequireCV.compare(this._RequireCV, otherAssessmentCriteriaTemplate._RequireCV))
            {
                listener.notifyFieldChange(this, other, FIELD_RequireCV, HELPER_RequireCV.toObject(this._RequireCV), HELPER_RequireCV.toObject(otherAssessmentCriteriaTemplate._RequireCV));
            }
            if (!HELPER_AssessmentType.compare(this._AssessmentType, otherAssessmentCriteriaTemplate._AssessmentType))
            {
                listener.notifyFieldChange(this, other, FIELD_AssessmentType, HELPER_AssessmentType.toObject(this._AssessmentType), HELPER_AssessmentType.toObject(otherAssessmentCriteriaTemplate._AssessmentType));
            }
            if (!HELPER_IncludeAssessmentCriteria.compare(this._IncludeAssessmentCriteria, otherAssessmentCriteriaTemplate._IncludeAssessmentCriteria))
            {
                listener.notifyFieldChange(this, other, FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject(this._IncludeAssessmentCriteria), HELPER_IncludeAssessmentCriteria.toObject(otherAssessmentCriteriaTemplate._IncludeAssessmentCriteria));
            }

            // Compare single assocs
            _Level.compare (otherAssessmentCriteriaTemplate._Level, listener);
            _Occupation.compare (otherAssessmentCriteriaTemplate._Occupation, listener);
            _JobOwner.compare (otherAssessmentCriteriaTemplate._JobOwner, listener);
            _Job.compare (otherAssessmentCriteriaTemplate._Job, listener);
            _Client.compare (otherAssessmentCriteriaTemplate._Client, listener);
            _HiringTeam.compare (otherAssessmentCriteriaTemplate._HiringTeam, listener);
            _CompanyUser.compare (otherAssessmentCriteriaTemplate._CompanyUser, listener);
            _ILOJobTitle.compare (otherAssessmentCriteriaTemplate._ILOJobTitle, listener);
            

            // Compare multiple assocs
            _AssessmentCriterias.compare (otherAssessmentCriteriaTemplate._AssessmentCriterias, listener);
            _WorkFlows.compare (otherAssessmentCriteriaTemplate._WorkFlows, listener);
            
        }
    }


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

        visitor.visitField(this, FIELD_SuggestedAssessmentType, HELPER_SuggestedAssessmentType.toObject(getSuggestedAssessmentType()));
        
    }


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

        visitor.visitField(this, FIELD_TemplateName, HELPER_TemplateName.toObject(getTemplateName()));
        visitor.visitField(this, FIELD_JobTitle, HELPER_JobTitle.toObject(getJobTitle()));
        visitor.visitField(this, FIELD_JobDescription, HELPER_JobDescription.toObject(getJobDescription()));
        visitor.visitField(this, FIELD_ReferenceNumber, HELPER_ReferenceNumber.toObject(getReferenceNumber()));
        visitor.visitField(this, FIELD_GoogleAddressText, HELPER_GoogleAddressText.toObject(getGoogleAddressText()));
        visitor.visitField(this, FIELD_ExpectedCandidateRadius, HELPER_ExpectedCandidateRadius.toObject(getExpectedCandidateRadius()));
        visitor.visitField(this, FIELD_Remote, HELPER_Remote.toObject(getRemote()));
        visitor.visitField(this, FIELD_JobType, HELPER_JobType.toObject(getJobType()));
        visitor.visitField(this, FIELD_Industry, HELPER_Industry.toObject(getIndustry()));
        visitor.visitField(this, FIELD_RequireCV, HELPER_RequireCV.toObject(getRequireCV()));
        visitor.visitField(this, FIELD_AssessmentType, HELPER_AssessmentType.toObject(getAssessmentType()));
        visitor.visitField(this, FIELD_IncludeAssessmentCriteria, HELPER_IncludeAssessmentCriteria.toObject(getIncludeAssessmentCriteria()));
        visitor.visitAssociation (_Level);
        visitor.visitAssociation (_Occupation);
        visitor.visitAssociation (_JobOwner);
        visitor.visitAssociation (_Job);
        visitor.visitAssociation (_Client);
        visitor.visitAssociation (_HiringTeam);
        visitor.visitAssociation (_CompanyUser);
        visitor.visitAssociation (_ILOJobTitle);
        visitor.visitAssociation (_AssessmentCriterias);
        visitor.visitAssociation (_WorkFlows);
        
    }


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

        if (scope.includes (_Level))
        {
            visitor.visit (_Level);
        }
        if (scope.includes (_Occupation))
        {
            visitor.visit (_Occupation);
        }
        if (scope.includes (_JobOwner))
        {
            visitor.visit (_JobOwner);
        }
        if (scope.includes (_Job))
        {
            visitor.visit (_Job);
        }
        if (scope.includes (_Client))
        {
            visitor.visit (_Client);
        }
        if (scope.includes (_HiringTeam))
        {
            visitor.visit (_HiringTeam);
        }
        if (scope.includes (_CompanyUser))
        {
            visitor.visit (_CompanyUser);
        }
        if (scope.includes (_ILOJobTitle))
        {
            visitor.visit (_ILOJobTitle);
        }
        if (scope.includes (_AssessmentCriterias))
        {
            visitor.visit (_AssessmentCriterias);
        }
        if (scope.includes (_WorkFlows))
        {
            visitor.visit (_WorkFlows);
        }
        
    }


    public static AssessmentCriteriaTemplate createAssessmentCriteriaTemplate (ObjectTransaction transaction) throws StorageException
    {
        AssessmentCriteriaTemplate     result = new AssessmentCriteriaTemplate ();

        result.initialiseNewObject (transaction);

        return result;
    }


    public static AssessmentCriteriaTemplate getAssessmentCriteriaTemplateByID (ObjectTransaction transaction, Long objectID) throws StorageException
    {
        return (AssessmentCriteriaTemplate)(transaction.getObjectByID (REFERENCE_AssessmentCriteriaTemplate, objectID));
    }

    public boolean testFilter (String attribName, QueryFilter filter) throws StorageException
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_TemplateName))
        {
            return filter.matches (getTemplateName ());
        }
        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_ReferenceNumber))
        {
            return filter.matches (getReferenceNumber ());
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return filter.matches (getGoogleAddressText ());
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return filter.matches (getExpectedCandidateRadius ());
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return filter.matches (getRemote ());
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return filter.matches (getJobType ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return filter.matches (getIndustry ());
        }
        else if (attribName.equals (FIELD_RequireCV))
        {
            return filter.matches (getRequireCV ());
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return filter.matches (getAssessmentType ());
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return filter.matches (getIncludeAssessmentCriteria ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Level))
        {
            return filter.matches (getLevel ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Occupation))
        {
            return filter.matches (getOccupation ());
        }
        else if (attribName.equals (SINGLEREFERENCE_JobOwner))
        {
            return filter.matches (getJobOwner ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Job))
        {
            return filter.matches (getJob ());
        }
        else if (attribName.equals (SINGLEREFERENCE_Client))
        {
            return filter.matches (getClient ());
        }
        else if (attribName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return filter.matches (getHiringTeam ());
        }
        else if (attribName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return filter.matches (getCompanyUser ());
        }
        else if (attribName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return filter.matches (getILOJobTitle ());
        }
        else
        {
            return super.testFilter (attribName, filter);
        }
    }


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

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

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

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

            
            public SearchAll andTemplateName (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_assessment_template.template_name", "TemplateName");
                return this;
            }
            
            public SearchAll andJobTitle (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_title", "JobTitle");
                return this;
            }
            
            public SearchAll andJobDescription (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_description", "JobDescription");
                return this;
            }
            
            public SearchAll andReferenceNumber (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_assessment_template.ref_number", "ReferenceNumber");
                return this;
            }
            
            public SearchAll andGoogleAddressText (QueryFilter<String> filter)
            {
                filter.addFilter (context, "tl_assessment_template.google_address_text", "GoogleAddressText");
                return this;
            }
            
            public SearchAll andExpectedCandidateRadius (QueryFilter<LocationRadius> filter)
            {
                filter.addFilter (context, "tl_assessment_template.location_radius", "ExpectedCandidateRadius");
                return this;
            }
            
            public SearchAll andRemote (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_assessment_template.remote", "Remote");
                return this;
            }
            
            public SearchAll andJobType (QueryFilter<JobType> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_type", "JobType");
                return this;
            }
            
            public SearchAll andIndustry (QueryFilter<Industry> filter)
            {
                filter.addFilter (context, "tl_assessment_template.industry", "Industry");
                return this;
            }
            
            public SearchAll andRequireCV (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_assessment_template.require_cv", "RequireCV");
                return this;
            }
            
            public SearchAll andAssessmentType (QueryFilter<AssessmentType> filter)
            {
                filter.addFilter (context, "tl_assessment_template.assessment_type", "AssessmentType");
                return this;
            }
            
            public SearchAll andIncludeAssessmentCriteria (QueryFilter<Boolean> filter)
            {
                filter.addFilter (context, "tl_assessment_template.include_assessment_criteria", "IncludeAssessmentCriteria");
                return this;
            }
            
            public SearchAll andLevel (QueryFilter<Level> filter)
            {
                filter.addFilter (context, "tl_assessment_template.level_id", "Level");
                return this;
            }
            
            public SearchAll andOccupation (QueryFilter<Occupation> filter)
            {
                filter.addFilter (context, "tl_assessment_template.occupation_id", "Occupation");
                return this;
            }
            
            public SearchAll andJobOwner (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_owner_id", "JobOwner");
                return this;
            }
            
            public SearchAll andJob (QueryFilter<Job> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_id", "Job");
                return this;
            }
            
            public SearchAll andClient (QueryFilter<Client> filter)
            {
                filter.addFilter (context, "tl_assessment_template.client_id", "Client");
                return this;
            }
            
            public SearchAll andHiringTeam (QueryFilter<HiringTeam> filter)
            {
                filter.addFilter (context, "tl_assessment_template.hiring_team_id", "HiringTeam");
                return this;
            }
            
            public SearchAll andCompanyUser (QueryFilter<CompanyUser> filter)
            {
                filter.addFilter (context, "tl_assessment_template.company_user_id", "CompanyUser");
                return this;
            }
            
            public SearchAll andILOJobTitle (QueryFilter<ILOJobTitle> filter)
            {
                filter.addFilter (context, "tl_assessment_template.job_title_id", "ILOJobTitle");
                return this;
            }
            
                public AssessmentCriteriaTemplate[]
             search (ObjectTransaction transaction) throws StorageException
        {
            
            
            BaseBusinessClass[]     results = super.search (transaction, REFERENCE_AssessmentCriteriaTemplate, SEARCH_All, criteria);
            Set<AssessmentCriteriaTemplate>   typedResults = new LinkedHashSet <AssessmentCriteriaTemplate> ();
            for (BaseBusinessClass bbcResult : results)
            {
                AssessmentCriteriaTemplate aResult = (AssessmentCriteriaTemplate)bbcResult;
                
                typedResults.add (aResult);
            }
            
                    return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new AssessmentCriteriaTemplate[0]);
                            
        }
    }

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



    public Object getAttribute (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_TemplateName))
        {
            return HELPER_TemplateName.toObject (getTemplateName ());
        }
        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_ReferenceNumber))
        {
            return HELPER_ReferenceNumber.toObject (getReferenceNumber ());
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return HELPER_GoogleAddressText.toObject (getGoogleAddressText ());
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return HELPER_ExpectedCandidateRadius.toObject (getExpectedCandidateRadius ());
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return HELPER_Remote.toObject (getRemote ());
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return HELPER_JobType.toObject (getJobType ());
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry.toObject (getIndustry ());
        }
        else if (attribName.equals (FIELD_RequireCV))
        {
            return HELPER_RequireCV.toObject (getRequireCV ());
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return HELPER_AssessmentType.toObject (getAssessmentType ());
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return HELPER_IncludeAssessmentCriteria.toObject (getIncludeAssessmentCriteria ());
        }
        else if (attribName.equals (FIELD_SuggestedAssessmentType))
        {
            return HELPER_SuggestedAssessmentType.toObject (getSuggestedAssessmentType ());
        }
        else
        {
            return super.getAttribute (attribName);
        }
    }


    public AttributeHelper getAttributeHelper (String attribName)
    {
        if (false)
        {
            throw new RuntimeException ("Game over man!!");
        }
        else if (attribName.equals (FIELD_TemplateName))
        {
            return HELPER_TemplateName;
        }
        else if (attribName.equals (FIELD_JobTitle))
        {
            return HELPER_JobTitle;
        }
        else if (attribName.equals (FIELD_JobDescription))
        {
            return HELPER_JobDescription;
        }
        else if (attribName.equals (FIELD_ReferenceNumber))
        {
            return HELPER_ReferenceNumber;
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            return HELPER_GoogleAddressText;
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            return HELPER_ExpectedCandidateRadius;
        }
        else if (attribName.equals (FIELD_Remote))
        {
            return HELPER_Remote;
        }
        else if (attribName.equals (FIELD_JobType))
        {
            return HELPER_JobType;
        }
        else if (attribName.equals (FIELD_Industry))
        {
            return HELPER_Industry;
        }
        else if (attribName.equals (FIELD_RequireCV))
        {
            return HELPER_RequireCV;
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            return HELPER_AssessmentType;
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return HELPER_IncludeAssessmentCriteria;
        }
        else if (attribName.equals (FIELD_SuggestedAssessmentType))
        {
            return HELPER_SuggestedAssessmentType;
        }
        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_TemplateName))
        {
            setTemplateName ((String)(HELPER_TemplateName.fromObject (_TemplateName, attribValue)));            
        }
        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_ReferenceNumber))
        {
            setReferenceNumber ((String)(HELPER_ReferenceNumber.fromObject (_ReferenceNumber, attribValue)));            
        }
        else if (attribName.equals (FIELD_GoogleAddressText))
        {
            setGoogleAddressText ((String)(HELPER_GoogleAddressText.fromObject (_GoogleAddressText, attribValue)));            
        }
        else if (attribName.equals (FIELD_ExpectedCandidateRadius))
        {
            setExpectedCandidateRadius ((LocationRadius)(HELPER_ExpectedCandidateRadius.fromObject (_ExpectedCandidateRadius, attribValue)));            
        }
        else if (attribName.equals (FIELD_Remote))
        {
            setRemote ((Boolean)(HELPER_Remote.fromObject (_Remote, attribValue)));            
        }
        else if (attribName.equals (FIELD_JobType))
        {
            setJobType ((JobType)(HELPER_JobType.fromObject (_JobType, attribValue)));            
        }
        else if (attribName.equals (FIELD_Industry))
        {
            setIndustry ((Industry)(HELPER_Industry.fromObject (_Industry, attribValue)));            
        }
        else if (attribName.equals (FIELD_RequireCV))
        {
            setRequireCV ((Boolean)(HELPER_RequireCV.fromObject (_RequireCV, attribValue)));            
        }
        else if (attribName.equals (FIELD_AssessmentType))
        {
            setAssessmentType ((AssessmentType)(HELPER_AssessmentType.fromObject (_AssessmentType, attribValue)));            
        }
        else if (attribName.equals (FIELD_IncludeAssessmentCriteria))
        {
            setIncludeAssessmentCriteria ((Boolean)(HELPER_IncludeAssessmentCriteria.fromObject (_IncludeAssessmentCriteria, attribValue)));            
        }
        else if (attribName.equals (FIELD_SuggestedAssessmentType))
        {
            setSuggestedAssessmentType ((AssessmentType)(HELPER_SuggestedAssessmentType.fromObject (_SuggestedAssessmentType, 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_TemplateName))
        {
            return getWriteability_TemplateName ();
        }
        else if (fieldName.equals (FIELD_JobTitle))
        {
            return getWriteability_JobTitle ();
        }
        else if (fieldName.equals (FIELD_JobDescription))
        {
            return getWriteability_JobDescription ();
        }
        else if (fieldName.equals (FIELD_ReferenceNumber))
        {
            return getWriteability_ReferenceNumber ();
        }
        else if (fieldName.equals (FIELD_GoogleAddressText))
        {
            return getWriteability_GoogleAddressText ();
        }
        else if (fieldName.equals (FIELD_ExpectedCandidateRadius))
        {
            return getWriteability_ExpectedCandidateRadius ();
        }
        else if (fieldName.equals (FIELD_Remote))
        {
            return getWriteability_Remote ();
        }
        else if (fieldName.equals (FIELD_JobType))
        {
            return getWriteability_JobType ();
        }
        else if (fieldName.equals (FIELD_Industry))
        {
            return getWriteability_Industry ();
        }
        else if (fieldName.equals (FIELD_RequireCV))
        {
            return getWriteability_RequireCV ();
        }
        else if (fieldName.equals (FIELD_AssessmentType))
        {
            return getWriteability_AssessmentType ();
        }
        else if (fieldName.equals (FIELD_IncludeAssessmentCriteria))
        {
            return getWriteability_IncludeAssessmentCriteria ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_AssessmentCriterias))
        {
            return getWriteability_AssessmentCriterias ();
        }
        else if (fieldName.equals (MULTIPLEREFERENCE_WorkFlows))
        {
            return getWriteability_WorkFlows ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Level))
        {
            return getWriteability_Level ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Occupation))
        {
            return getWriteability_Occupation ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_JobOwner))
        {
            return getWriteability_JobOwner ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Job))
        {
            return getWriteability_Job ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_Client))
        {
            return getWriteability_Client ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_HiringTeam))
        {
            return getWriteability_HiringTeam ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_CompanyUser))
        {
            return getWriteability_CompanyUser ();
        }
        else if (fieldName.equals (SINGLEREFERENCE_ILOJobTitle))
        {
            return getWriteability_ILOJobTitle ();
        }
        else if (fieldName.equals (FIELD_SuggestedAssessmentType))
        {
            return getWriteability_SuggestedAssessmentType ();
        }
        else
        {
            return super.getWriteable (fieldName);
        }
    }


    public void putUnwriteable (Set<String> fields)
    {
        
            if (getWriteability_TemplateName () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_TemplateName);
            }
        
            if (getWriteability_JobTitle () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobTitle);
            }
        
            if (getWriteability_JobDescription () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobDescription);
            }
        
            if (getWriteability_ReferenceNumber () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ReferenceNumber);
            }
        
            if (getWriteability_GoogleAddressText () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_GoogleAddressText);
            }
        
            if (getWriteability_ExpectedCandidateRadius () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_ExpectedCandidateRadius);
            }
        
            if (getWriteability_Remote () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Remote);
            }
        
            if (getWriteability_JobType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_JobType);
            }
        
            if (getWriteability_Industry () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_Industry);
            }
        
            if (getWriteability_RequireCV () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_RequireCV);
            }
        
            if (getWriteability_AssessmentType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_AssessmentType);
            }
        
            if (getWriteability_IncludeAssessmentCriteria () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_IncludeAssessmentCriteria);
            }
        
            if (getWriteability_SuggestedAssessmentType () != FieldWriteability.TRUE)
            {
                fields.add (FIELD_SuggestedAssessmentType);
            }
        

        super.putUnwriteable (fields);
    }

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

        
        result.add(HELPER_TemplateName.getAttribObject (getClass (), _TemplateName, false, FIELD_TemplateName));
        result.add(HELPER_JobTitle.getAttribObject (getClass (), _JobTitle, true, FIELD_JobTitle));
        result.add(HELPER_JobDescription.getAttribObject (getClass (), _JobDescription, true, FIELD_JobDescription));
        result.add(HELPER_ReferenceNumber.getAttribObject (getClass (), _ReferenceNumber, false, FIELD_ReferenceNumber));
        result.add(HELPER_GoogleAddressText.getAttribObject (getClass (), _GoogleAddressText, true, FIELD_GoogleAddressText));
        result.add(HELPER_ExpectedCandidateRadius.getAttribObject (getClass (), _ExpectedCandidateRadius, true, FIELD_ExpectedCandidateRadius));
        result.add(HELPER_Remote.getAttribObject (getClass (), _Remote, false, FIELD_Remote));
        result.add(HELPER_JobType.getAttribObject (getClass (), _JobType, true, FIELD_JobType));
        result.add(HELPER_Industry.getAttribObject (getClass (), _Industry, true, FIELD_Industry));
        result.add(HELPER_RequireCV.getAttribObject (getClass (), _RequireCV, false, FIELD_RequireCV));
        result.add(HELPER_AssessmentType.getAttribObject (getClass (), _AssessmentType, true, FIELD_AssessmentType));
        result.add(HELPER_IncludeAssessmentCriteria.getAttribObject (getClass (), _IncludeAssessmentCriteria, true, FIELD_IncludeAssessmentCriteria));
        result.add(HELPER_SuggestedAssessmentType.getAttribObject (getClass (), _SuggestedAssessmentType, false, FIELD_SuggestedAssessmentType));

        return result;
    }


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


    public Object getAttributeMetadata (String attribute, String metadata)
    {
        if (ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.containsKey (attribute))
        {
            return ((Map)ATTRIBUTES_METADATA_AssessmentCriteriaTemplate.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 AssessmentCriteriaTemplateBehaviourDecorator extends BaseBusinessClass.BBCBehaviourDecorator<AssessmentCriteriaTemplate>
    {

    /**
     * Get the attribute TemplateName
     */
    public String getTemplateName (AssessmentCriteriaTemplate obj, String original)
    {
        return original;
    }

    /**
     * Change the value set for attribute TemplateName.
     * May modify the field beforehand
     * Occurs before validation.
     */
    public String setTemplateName (AssessmentCriteriaTemplate obj, String newTemplateName) throws FieldException
    {
        return newTemplateName;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * Get the attribute SuggestedAssessmentType
     */
    public AssessmentType getSuggestedAssessmentType (AssessmentCriteriaTemplate obj, AssessmentType original)
    {
        return original;
    }

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

    }

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

        public AssessmentCriteriaTemplatePipeLineFactory (Collection<From> seed)
        {
            super(seed);
        }
        
        
        public PipeLine<From, ? extends Object> to(String name)
        {
            if (name.equals ("SuggestedAssessmentType"))
            {
                return toSuggestedAssessmentType ();
            }                
            if (name.equals ("AssessmentCriterias"))
            {
                return toAssessmentCriterias ();
            }                
            if (name.equals ("WorkFlows"))
            {
                return toWorkFlows ();
            }                
            if (name.equals ("TemplateName"))
            {
                return toTemplateName ();
            }                
            if (name.equals ("JobTitle"))
            {
                return toJobTitle ();
            }                
            if (name.equals ("JobDescription"))
            {
                return toJobDescription ();
            }                
            if (name.equals ("ReferenceNumber"))
            {
                return toReferenceNumber ();
            }                
            if (name.equals ("GoogleAddressText"))
            {
                return toGoogleAddressText ();
            }                
            if (name.equals ("ExpectedCandidateRadius"))
            {
                return toExpectedCandidateRadius ();
            }                
            if (name.equals ("Remote"))
            {
                return toRemote ();
            }                
            if (name.equals ("JobType"))
            {
                return toJobType ();
            }                
            if (name.equals ("Industry"))
            {
                return toIndustry ();
            }                
            if (name.equals ("RequireCV"))
            {
                return toRequireCV ();
            }                
            if (name.equals ("AssessmentType"))
            {
                return toAssessmentType ();
            }                
            if (name.equals ("IncludeAssessmentCriteria"))
            {
                return toIncludeAssessmentCriteria ();
            }                
            if (name.equals ("Level"))
            {
                return toLevel ();
            }                
            if (name.equals ("Occupation"))
            {
                return toOccupation ();
            }                
            if (name.equals ("JobOwner"))
            {
                return toJobOwner ();
            }                
            if (name.equals ("Job"))
            {
                return toJob ();
            }                
            if (name.equals ("Client"))
            {
                return toClient ();
            }                
            if (name.equals ("HiringTeam"))
            {
                return toHiringTeam ();
            }                
            if (name.equals ("CompanyUser"))
            {
                return toCompanyUser ();
            }                
            if (name.equals ("ILOJobTitle"))
            {
                return toILOJobTitle ();
            }                
            
            
            return super.to(name);
        }
        
        
        public PipeLine<From, AssessmentType> toSuggestedAssessmentType () { return pipe(new ORMAttributePipe<Me, AssessmentType>(FIELD_SuggestedAssessmentType));  }
        
        public PipeLine<From, String> toTemplateName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_TemplateName));  }
        
        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, String> toReferenceNumber () { return pipe(new ORMAttributePipe<Me, String>(FIELD_ReferenceNumber));  }
        
        public PipeLine<From, String> toGoogleAddressText () { return pipe(new ORMAttributePipe<Me, String>(FIELD_GoogleAddressText));  }
        
        public PipeLine<From, LocationRadius> toExpectedCandidateRadius () { return pipe(new ORMAttributePipe<Me, LocationRadius>(FIELD_ExpectedCandidateRadius));  }
        
        public PipeLine<From, Boolean> toRemote () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_Remote));  }
        
        public PipeLine<From, JobType> toJobType () { return pipe(new ORMAttributePipe<Me, JobType>(FIELD_JobType));  }
        
        public PipeLine<From, Industry> toIndustry () { return pipe(new ORMAttributePipe<Me, Industry>(FIELD_Industry));  }
        
        public PipeLine<From, Boolean> toRequireCV () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_RequireCV));  }
        
        public PipeLine<From, AssessmentType> toAssessmentType () { return pipe(new ORMAttributePipe<Me, AssessmentType>(FIELD_AssessmentType));  }
        
        public PipeLine<From, Boolean> toIncludeAssessmentCriteria () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_IncludeAssessmentCriteria));  }
        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 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 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 Job.JobPipeLineFactory<From, Job> toJob () { return toJob (Filter.ALL); }

        public Job.JobPipeLineFactory<From, Job> toJob (Filter<Job> filter) 
        { 
            return Job.REFERENCE_Job.new JobPipeLineFactory<From, Job> (this, new ORMSingleAssocPipe<Me, Job>(SINGLEREFERENCE_Job, 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 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 CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toCompanyUser () { return toCompanyUser (Filter.ALL); }

        public CompanyUser.CompanyUserPipeLineFactory<From, CompanyUser> toCompanyUser (Filter<CompanyUser> filter) 
        { 
            return CompanyUser.REFERENCE_CompanyUser.new CompanyUserPipeLineFactory<From, CompanyUser> (this, new ORMSingleAssocPipe<Me, CompanyUser>(SINGLEREFERENCE_CompanyUser, filter)); 
        }
        public ILOJobTitle.ILOJobTitlePipeLineFactory<From, ILOJobTitle> toILOJobTitle () { return toILOJobTitle (Filter.ALL); }

        public ILOJobTitle.ILOJobTitlePipeLineFactory<From, ILOJobTitle> toILOJobTitle (Filter<ILOJobTitle> filter) 
        { 
            return ILOJobTitle.REFERENCE_ILOJobTitle.new ILOJobTitlePipeLineFactory<From, ILOJobTitle> (this, new ORMSingleAssocPipe<Me, ILOJobTitle>(SINGLEREFERENCE_ILOJobTitle, 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 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, "SuggestedAssessmentType"))
        {
            return true;
        }
        

        return super.isTransientAttrib(attribName);
    }

    public boolean isTransientSingleReference(String assocName)
    {
        

        return super.isTransientSingleReference(assocName);
    }
}

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

    public void assertValid ()
    {
    }


    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 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 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 Job getJob () throws StorageException
    {
        return (Job)(Job.DUMMY_Job);
    }


    /**
     * Get the object id for the referenced object.  Does not force a DB access.
     */
    public Long getJobID ()
    {
        return Job.DUMMY_Job.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 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 CompanyUser getCompanyUser () throws StorageException
    {
        return (CompanyUser)(CompanyUser.DUMMY_CompanyUser);
    }


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

    public ILOJobTitle getILOJobTitle () throws StorageException
    {
        return (ILOJobTitle)(ILOJobTitle.DUMMY_ILOJobTitle);
    }


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

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

}

    
