package uk.ac.ox.zoo.seeg.abraid.mp.common.domain; import org.hibernate.annotations.Type; import org.joda.time.DateTime; import javax.persistence.*; import java.util.Collection; /** * Represents the current extent class (e.g. presence, absence) of an administrative unit, for a specific disease group. * Copyright (c) 2014 University of Oxford */ @NamedQueries({ @NamedQuery( name = "getAllGlobalAdminUnitDiseaseExtentClassesByDiseaseGroupId", query = "from AdminUnitDiseaseExtentClass a " + "inner join fetch a.adminUnitGlobal " + "where a.diseaseGroup.id=:diseaseGroupId" ), @NamedQuery( name = "getAllTropicalAdminUnitDiseaseExtentClassesByDiseaseGroupId", query = "from AdminUnitDiseaseExtentClass a " + "inner join fetch a.adminUnitTropical " + "where a.diseaseGroup.id=:diseaseGroupId" ), @NamedQuery( name = "getLatestDiseaseExtentClassChangeDateByDiseaseGroupId", query = "select max(a.classChangedDate) " + "from AdminUnitDiseaseExtentClass a " + "where a.diseaseGroup.id=:diseaseGroupId" ) }) @Entity @Table(name = "admin_unit_disease_extent_class") public class AdminUnitDiseaseExtentClass extends AbstractAdminUnitDiseaseExtentClass { /** A HQL fragment to choose between global and tropical gaul codes. */ public static final String PICK_EXTENT_GAUL_CODE = "CASE :isGlobal WHEN true " + " THEN a.adminUnitGlobal.gaulCode " + " ELSE a.adminUnitTropical.gaulCode " + "END"; /** A HQL query to select the gaul codes within a disease's extent. * (Used as a subquery in DiseaseOccurrence's named queries) */ public static final String EXTENT_GAUL_CODES_BY_DISEASE_GROUP_ID = "select (" + AdminUnitDiseaseExtentClass.PICK_EXTENT_GAUL_CODE + ") " + "from AdminUnitDiseaseExtentClass a " + "where a.diseaseGroup.id=:diseaseGroupId " + "and a.diseaseExtentClass in (" + " '" + DiseaseExtentClass.POSSIBLE_PRESENCE + "', " + " '" + DiseaseExtentClass.PRESENCE + "'" + ")"; // The disease group. @ManyToOne @JoinColumn(name = "disease_group_id") private DiseaseGroup diseaseGroup; // The date on which the modelling disease extent class last changed. @Column(name = "class_changed_date") @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime classChangedDate; // The disease extent class current under review by experts. @ManyToOne @JoinColumn(name = "validator_disease_extent_class", nullable = false) private DiseaseExtentClass validatorDiseaseExtentClass; // The number of disease occurrences giving rise to the validator extent class. @Column(name = "validator_occurrence_count", nullable = false) private int validatorOccurrenceCount; // List of the latest disease occurrences that were used in determining the validator extent class classification. @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "admin_unit_disease_extent_class_id") private Collection<DiseaseOccurrence> latestValidatorOccurrences; public AdminUnitDiseaseExtentClass() { } public AdminUnitDiseaseExtentClass(AdminUnitTropical adminUnitTropical) { this.setAdminUnitTropical(adminUnitTropical); } public AdminUnitDiseaseExtentClass(AdminUnitGlobal adminUnitGlobal, DiseaseGroup diseaseGroup, DiseaseExtentClass diseaseExtentClass, DiseaseExtentClass validatorDiseaseExtentClass, Integer validatorOccurrenceCount) { this.setAdminUnitGlobal(adminUnitGlobal); this.diseaseGroup = diseaseGroup; this.setDiseaseExtentClass(diseaseExtentClass); this.validatorDiseaseExtentClass = validatorDiseaseExtentClass; this.validatorOccurrenceCount = validatorOccurrenceCount; } public AdminUnitDiseaseExtentClass(AdminUnitTropical adminUnitTropical, DiseaseGroup diseaseGroup, DiseaseExtentClass diseaseExtentClass, DiseaseExtentClass validatorDiseaseExtentClass, Integer validatorOccurrenceCount) { this.setAdminUnitTropical(adminUnitTropical); this.diseaseGroup = diseaseGroup; this.setDiseaseExtentClass(diseaseExtentClass); this.validatorDiseaseExtentClass = validatorDiseaseExtentClass; this.validatorOccurrenceCount = validatorOccurrenceCount; } public AdminUnitDiseaseExtentClass(AdminUnitGlobal adminUnitGlobal, DiseaseGroup diseaseGroup, DiseaseExtentClass diseaseExtentClass, DiseaseExtentClass validatorDiseaseExtentClass, Integer validatorOccurrenceCount, DateTime classChangedDate) { this.setAdminUnitGlobal(adminUnitGlobal); this.diseaseGroup = diseaseGroup; this.setDiseaseExtentClass(diseaseExtentClass); this.validatorDiseaseExtentClass = validatorDiseaseExtentClass; this.validatorOccurrenceCount = validatorOccurrenceCount; this.classChangedDate = classChangedDate; } public AdminUnitDiseaseExtentClass(AdminUnitTropical adminUnitTropical, DiseaseGroup diseaseGroup, DiseaseExtentClass diseaseExtentClass, DiseaseExtentClass validatorDiseaseExtentClass, Integer validatorOccurrenceCount, DateTime classChangedDate) { this.setAdminUnitTropical(adminUnitTropical); this.diseaseGroup = diseaseGroup; this.setDiseaseExtentClass(diseaseExtentClass); this.validatorDiseaseExtentClass = validatorDiseaseExtentClass; this.validatorOccurrenceCount = validatorOccurrenceCount; this.classChangedDate = classChangedDate; } public DiseaseGroup getDiseaseGroup() { return diseaseGroup; } public void setDiseaseGroup(DiseaseGroup diseaseGroup) { this.diseaseGroup = diseaseGroup; } public DateTime getClassChangedDate() { return classChangedDate; } public void setClassChangedDate(DateTime classChangedDate) { this.classChangedDate = classChangedDate; } public int getValidatorOccurrenceCount() { return validatorOccurrenceCount; } public void setValidatorOccurrenceCount(int occurrenceCount) { this.validatorOccurrenceCount = occurrenceCount; } public Collection<DiseaseOccurrence> getLatestValidatorOccurrences() { return latestValidatorOccurrences; } public void setLatestValidatorOccurrences(Collection<DiseaseOccurrence> occurrences) { this.latestValidatorOccurrences = occurrences; } public DiseaseExtentClass getValidatorDiseaseExtentClass() { return validatorDiseaseExtentClass; } public void setValidatorDiseaseExtentClass(DiseaseExtentClass validatorDiseaseExtentClass) { this.validatorDiseaseExtentClass = validatorDiseaseExtentClass; } ///COVERAGE:OFF - generated code ///CHECKSTYLE:OFF AvoidInlineConditionalsCheck|LineLengthCheck|MagicNumberCheck|NeedBracesCheck - generated code @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; AdminUnitDiseaseExtentClass that = (AdminUnitDiseaseExtentClass) o; if (diseaseGroup != null ? !diseaseGroup.equals(that.diseaseGroup) : that.diseaseGroup != null) return false; if (classChangedDate != null ? !classChangedDate.equals(that.classChangedDate) : that.classChangedDate != null) return false; if (validatorDiseaseExtentClass != null ? !validatorDiseaseExtentClass.equals(that.validatorDiseaseExtentClass) : that.validatorDiseaseExtentClass != null) return false; if (validatorOccurrenceCount != that.validatorOccurrenceCount) return false; if (latestValidatorOccurrences != null ? !latestValidatorOccurrences.equals(that.latestValidatorOccurrences) : that.latestValidatorOccurrences != null) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (diseaseGroup != null ? diseaseGroup.hashCode() : 0); result = 31 * result + (classChangedDate != null ? classChangedDate.hashCode() : 0); result = 31 * result + (validatorDiseaseExtentClass != null ? validatorDiseaseExtentClass.hashCode() : 0); result = 31 * result + validatorOccurrenceCount; result = 31 * result + (latestValidatorOccurrences != null ? latestValidatorOccurrences.hashCode() : 0); return result; } ///CHECKSTYLE:ON ///COVERAGE:ON }