Coverage Report - org.kuali.rice.kim.impl.identity.entity.EntityBo
 
Classes in this File Line Coverage Branch Coverage Complexity
EntityBo
49%
43/87
19%
14/72
0
 
 1  
 package org.kuali.rice.kim.impl.identity.entity
 2  
 
 3  
 import javax.persistence.CascadeType
 4  
 import javax.persistence.Column
 5  
 import javax.persistence.FetchType
 6  
 import javax.persistence.Id
 7  
 import javax.persistence.JoinColumn
 8  
 import javax.persistence.OneToMany
 9  
 import javax.persistence.OneToOne
 10  
 import javax.persistence.Table
 11  
 import org.apache.commons.collections.CollectionUtils
 12  
 import org.hibernate.annotations.Fetch
 13  
 import org.hibernate.annotations.FetchMode
 14  
 import org.hibernate.annotations.Type
 15  
 import org.kuali.rice.kim.api.identity.EntityUtils
 16  
 import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation
 17  
 import org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship
 18  
 import org.kuali.rice.kim.api.identity.employment.EntityEmployment
 19  
 import org.kuali.rice.kim.api.identity.entity.Entity
 20  
 import org.kuali.rice.kim.api.identity.entity.EntityContract
 21  
 import org.kuali.rice.kim.api.identity.entity.EntityDefault
 22  
 import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier
 23  
 import org.kuali.rice.kim.api.identity.name.EntityName
 24  
 import org.kuali.rice.kim.api.identity.name.EntityNameContract
 25  
 import org.kuali.rice.kim.api.identity.personal.EntityEthnicity
 26  
 import org.kuali.rice.kim.api.identity.principal.Principal
 27  
 import org.kuali.rice.kim.api.identity.residency.EntityResidency
 28  
 import org.kuali.rice.kim.api.identity.type.EntityTypeData
 29  
 import org.kuali.rice.kim.api.identity.visa.EntityVisa
 30  
 import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationBo
 31  
 import org.kuali.rice.kim.impl.identity.citizenship.EntityCitizenshipBo
 32  
 import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentBo
 33  
 import org.kuali.rice.kim.impl.identity.external.EntityExternalIdentifierBo
 34  
 import org.kuali.rice.kim.impl.identity.name.EntityNameBo
 35  
 import org.kuali.rice.kim.impl.identity.personal.EntityBioDemographicsBo
 36  
 import org.kuali.rice.kim.impl.identity.personal.EntityEthnicityBo
 37  
 import org.kuali.rice.kim.impl.identity.principal.PrincipalBo
 38  
 import org.kuali.rice.kim.impl.identity.privacy.EntityPrivacyPreferencesBo
 39  
 import org.kuali.rice.kim.impl.identity.residency.EntityResidencyBo
 40  
 import org.kuali.rice.kim.impl.identity.type.EntityTypeDataBo
 41  
 import org.kuali.rice.kim.impl.identity.visa.EntityVisaBo
 42  
 import org.kuali.rice.krad.bo.PersistableBusinessObjectBase
 43  
 
 44  
 @javax.persistence.Entity
 45  
 @Table(name = "KRIM_ENTITY_T")
 46  
 class EntityBo extends PersistableBusinessObjectBase implements EntityContract {
 47  
     @Id
 48  
         @Column(name = "ENTITY_ID")
 49  
         String id;
 50  
 
 51  
         @OneToMany(fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 52  
         @Fetch(value = FetchMode.SELECT)
 53  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 54  1
         List<EntityNameBo> names = new ArrayList<EntityNameBo>()
 55  
 
 56  
         @OneToMany(fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 57  
         @Fetch(value = FetchMode.SELECT)
 58  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 59  1
         List<PrincipalBo> principals = new ArrayList<PrincipalBo>()
 60  
 
 61  
         @OneToMany(fetch=FetchType.EAGER,cascade=[CascadeType.ALL])
 62  
         @Fetch(value = FetchMode.SELECT)
 63  
         @JoinColumn(name="ENTITY_ID", insertable = false, updatable = false)
 64  1
     List<EntityExternalIdentifierBo> externalIdentifiers = new ArrayList<EntityExternalIdentifierBo>()
 65  
 
 66  
         @Fetch(value = FetchMode.SELECT)
 67  
         @OneToMany(fetch=FetchType.EAGER,cascade=[CascadeType.ALL])
 68  
         @JoinColumn(name="ENTITY_ID", insertable = false, updatable = false)
 69  1
         List<EntityAffiliationBo> affiliations  = new ArrayList<EntityAffiliationBo>()
 70  
 
 71  
         @OneToMany(fetch=FetchType.EAGER, cascade=[CascadeType.ALL])
 72  
         @Fetch(value = FetchMode.SELECT)
 73  
         @JoinColumn(name="ENTITY_ID", insertable = false, updatable = false)
 74  1
         List<EntityEmploymentBo> employmentInformation = new ArrayList<EntityEmploymentBo>()
 75  
 
 76  
         @OneToMany(fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 77  
         @Fetch(value = FetchMode.SELECT)
 78  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 79  1
         List<EntityTypeDataBo> entityTypes  = new ArrayList<EntityTypeDataBo>()
 80  
         
 81  
         @OneToOne(targetEntity=EntityPrivacyPreferencesBo.class, fetch = FetchType.EAGER, cascade = [CascadeType.MERGE, CascadeType.REFRESH])
 82  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 83  
         EntityPrivacyPreferencesBo privacyPreferences
 84  
 
 85  
         @OneToOne(targetEntity=EntityBioDemographicsBo.class, fetch = FetchType.EAGER, cascade = [])
 86  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 87  
         EntityBioDemographicsBo bioDemographics
 88  
         
 89  
         @OneToMany(targetEntity = EntityCitizenshipBo.class, fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 90  
         @Fetch(value = FetchMode.SELECT)
 91  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 92  1
         List<EntityCitizenshipBo> citizenships = new ArrayList<EntityCitizenshipBo>()
 93  
 
 94  
         @OneToMany(targetEntity = EntityEthnicityBo.class, fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 95  
         @Fetch(value = FetchMode.SELECT)
 96  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 97  1
         List<EntityEthnicityBo> ethnicities  = new ArrayList<EntityEthnicityBo>()
 98  
 
 99  
         @OneToMany(targetEntity = EntityResidencyBo.class, fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 100  
         @Fetch(value = FetchMode.SELECT)
 101  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 102  1
         List<EntityResidencyBo> residencies = new ArrayList<EntityResidencyBo>()
 103  
 
 104  
         @OneToMany(targetEntity = EntityVisaBo.class, fetch = FetchType.EAGER, cascade = [ CascadeType.ALL ])
 105  
         @Fetch(value = FetchMode.SELECT)
 106  
         @JoinColumn(name = "ENTITY_ID", insertable = false, updatable = false)
 107  1
         List<EntityVisaBo> visas  = new ArrayList<EntityVisaBo>()
 108  
 
 109  
     @Type(type="yes_no")
 110  
     @Column(name="ACTV_IND")
 111  
     boolean active;
 112  
 
 113  
      /*
 114  
        * Converts a mutable EntityBo to an immutable Entity representation.
 115  
        * @param bo
 116  
        * @return an immutable Entity
 117  
        */
 118  
       static Entity to(EntityBo bo) {
 119  1
         if (bo == null) { return null }
 120  1
         return Entity.Builder.create(bo).build()
 121  
       }
 122  
 
 123  
       static EntityDefault toDefault(EntityBo bo) {
 124  0
           if (bo == null) { return null }
 125  0
           return EntityDefault.Builder.create(bo).build()
 126  
       }
 127  
 
 128  
       /**
 129  
        * Creates a EntityBo business object from an immutable representation of a Entity.
 130  
        * @param an immutable Entity
 131  
        * @return a EntityBo
 132  
        */
 133  
       static EntityBo from(Entity immutable) {
 134  1
         if (immutable == null) {return null}
 135  
 
 136  1
         EntityBo bo = new EntityBo()
 137  1
         bo.active = immutable.active
 138  1
         bo.id = immutable.id
 139  
 
 140  1
         bo.names = new ArrayList<EntityNameBo>()
 141  1
         if (CollectionUtils.isNotEmpty(immutable.names)) {
 142  0
             for (EntityName name : immutable.names) {
 143  0
                 bo.names.add(EntityNameBo.from(name))
 144  
             }
 145  
         }
 146  
 
 147  1
             bo.principals = new ArrayList<PrincipalBo>()
 148  1
         if (CollectionUtils.isNotEmpty(immutable.principals)) {
 149  0
             for (Principal principal : immutable.principals) {
 150  0
                 bo.principals.add(PrincipalBo.from(principal))
 151  
             }
 152  
         }
 153  
 
 154  1
         bo.externalIdentifiers = new ArrayList<EntityExternalIdentifierBo>();
 155  1
         if (CollectionUtils.isNotEmpty(immutable.externalIdentifiers)) {
 156  0
             for (EntityExternalIdentifier externalId : immutable.externalIdentifiers) {
 157  0
                 bo.externalIdentifiers.add(EntityExternalIdentifierBo.from(externalId))
 158  
             }
 159  
         }
 160  
 
 161  1
         bo.affiliations = new ArrayList<EntityAffiliationBo>()
 162  1
         if (CollectionUtils.isNotEmpty(immutable.affiliations)) {
 163  0
             for (EntityAffiliation affiliation : immutable.affiliations) {
 164  0
                 bo.affiliations.add(EntityAffiliationBo.from(affiliation))
 165  
             }
 166  
         }
 167  
 
 168  1
         bo.employmentInformation = new ArrayList<EntityEmploymentBo>()
 169  1
         if (CollectionUtils.isNotEmpty(immutable.employmentInformation)) {
 170  0
             for (EntityEmployment employment : immutable.employmentInformation) {
 171  0
                 bo.employmentInformation.add(EntityEmploymentBo.from(employment))
 172  
             }
 173  
         }
 174  
 
 175  1
         bo.entityTypes = new ArrayList<EntityTypeDataBo>()
 176  1
         if (CollectionUtils.isNotEmpty(immutable.entityTypes)) {
 177  0
             for (EntityTypeData entityType : immutable.entityTypes) {
 178  0
                 bo.entityTypes.add(EntityTypeDataBo.from(entityType))
 179  
             }
 180  
         }
 181  
 
 182  1
         if (immutable.privacyPreferences != null) {
 183  0
             bo.privacyPreferences = EntityPrivacyPreferencesBo.from(immutable.privacyPreferences)
 184  
         }
 185  
 
 186  1
         if (immutable.bioDemographics != null) {
 187  0
             bo.bioDemographics = EntityBioDemographicsBo.from(immutable.bioDemographics)
 188  
         }
 189  
 
 190  1
         bo.citizenships = new ArrayList<EntityCitizenshipBo>()
 191  1
         if (CollectionUtils.isNotEmpty(immutable.citizenships)) {
 192  0
             for (EntityCitizenship citizenship : immutable.citizenships) {
 193  0
                 bo.citizenships.add(EntityCitizenshipBo.from(citizenship))
 194  
             }
 195  
         }
 196  
 
 197  1
         bo.ethnicities = new ArrayList<EntityEthnicityBo>()
 198  1
         if (CollectionUtils.isNotEmpty(immutable.ethnicities)) {
 199  0
             for (EntityEthnicity ethnicity : immutable.ethnicities) {
 200  0
                 bo.ethnicities.add(EntityEthnicityBo.from(ethnicity))
 201  
             }
 202  
         }
 203  
 
 204  1
         bo.residencies = new ArrayList<EntityResidencyBo>()
 205  1
         if (CollectionUtils.isNotEmpty(immutable.residencies)) {
 206  0
             for (EntityResidency residency : immutable.residencies) {
 207  0
                 bo.residencies.add(EntityResidencyBo.from(residency))
 208  
             }
 209  
         }
 210  
 
 211  1
         bo.visas = new ArrayList<EntityVisaBo>()
 212  1
         if (CollectionUtils.isNotEmpty(immutable.visas)) {
 213  0
             for (EntityVisa visa : immutable.visas) {
 214  0
                 bo.visas.add(EntityVisaBo.from(visa))
 215  
             }
 216  
         }
 217  
 
 218  1
         bo.versionNumber = immutable.versionNumber
 219  1
         bo.objectId = immutable.objectId
 220  
 
 221  1
         return bo;
 222  
       }
 223  
 
 224  
 
 225  
     EntityTypeDataBo getEntityType(String entityTypeCode) {
 226  0
         if (CollectionUtils.isEmpty(this.entityTypes)) {
 227  0
             return null
 228  
         }
 229  0
         for (EntityTypeDataBo entType : this.entityTypes) {
 230  0
             if (entType.getEntityTypeCode().equals(entityTypeCode)) {
 231  0
                 return entType
 232  
             }
 233  
         }
 234  0
         return null
 235  
     }
 236  
 
 237  
     EntityEmploymentBo getPrimaryEmployment() {
 238  0
         if (CollectionUtils.isEmpty(this.employmentInformation)) {
 239  0
             return null
 240  
         }
 241  0
         for (EntityEmploymentBo employment : this.employmentInformation) {
 242  0
             if (employment.isPrimary() && employment.isActive()) {
 243  0
                 return employment
 244  
             }
 245  
         }
 246  0
         return null
 247  
     }
 248  
 
 249  
     EntityAffiliationBo getDefaultAffiliation() {
 250  0
         return EntityUtils.getDefaultItem(this.affiliations)
 251  
     }
 252  
 
 253  
     EntityExternalIdentifierBo getEntityExternalIdentifier(String externalIdentifierTypeCode) {
 254  0
         if (CollectionUtils.isEmpty(this.externalIdentifiers)) {
 255  0
             return null
 256  
         }
 257  0
         for (EntityExternalIdentifierBo externalId : this.externalIdentifiers) {
 258  0
             if (externalId.getExternalIdentifierTypeCode().equals(externalIdentifierTypeCode)) {
 259  0
                 return externalId
 260  
             }
 261  
         }
 262  0
         return null
 263  
     }
 264  
 
 265  
     EntityNameContract getDefaultName() {
 266  0
         return EntityUtils.getDefaultItem(this.names)
 267  
     }
 268  
 
 269  
     @Override
 270  
     public EntityPrivacyPreferencesBo getPrivacyPreferences() {
 271  1
         return this.privacyPreferences
 272  
     }
 273  
 
 274  
     @Override
 275  
     public EntityBioDemographicsBo getBioDemographics() {
 276  1
         return this.bioDemographics
 277  
     }
 278  
 }