
001/* 002 * #%L 003 * HAPI FHIR JPA Server 004 * %% 005 * Copyright (C) 2014 - 2023 Smile CDR, Inc. 006 * %% 007 * Licensed under the Apache License, Version 2.0 (the "License"); 008 * you may not use this file except in compliance with the License. 009 * You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 * #L% 019 */ 020package ca.uhn.fhir.jpa.entity; 021 022import ca.uhn.fhir.util.ValidateUtil; 023import org.apache.commons.lang3.builder.EqualsBuilder; 024import org.apache.commons.lang3.builder.HashCodeBuilder; 025import org.apache.commons.lang3.builder.ToStringBuilder; 026import org.apache.commons.lang3.builder.ToStringStyle; 027 028import javax.annotation.Nonnull; 029import javax.persistence.*; 030import java.io.Serializable; 031 032import static org.apache.commons.lang3.StringUtils.left; 033import static org.apache.commons.lang3.StringUtils.length; 034 035@Table(name = "TRM_VALUESET_C_DESIGNATION", indexes = { 036 // must have same name that indexed FK or SchemaMigrationTest complains because H2 sets this index automatically 037 @Index(name = "FK_TRM_VALUESET_CONCEPT_PID", columnList = "VALUESET_CONCEPT_PID", unique = false) 038}) 039@Entity() 040public class TermValueSetConceptDesignation implements Serializable { 041 private static final long serialVersionUID = 1L; 042 043 @Id() 044 @SequenceGenerator(name = "SEQ_VALUESET_C_DSGNTN_PID", sequenceName = "SEQ_VALUESET_C_DSGNTN_PID") 045 @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_VALUESET_C_DSGNTN_PID") 046 @Column(name = "PID") 047 private Long myId; 048 049 @ManyToOne(fetch = FetchType.LAZY) 050 @JoinColumn(name = "VALUESET_CONCEPT_PID", referencedColumnName = "PID", nullable = false, foreignKey = @ForeignKey(name = "FK_TRM_VALUESET_CONCEPT_PID")) 051 private TermValueSetConcept myConcept; 052 053 @Column(name = "VALUESET_CONCEPT_PID", insertable = false, updatable = false, nullable = false) 054 private Long myConceptPid; 055 056 @ManyToOne(fetch = FetchType.LAZY) 057 @JoinColumn(name = "VALUESET_PID", referencedColumnName = "PID", nullable = false, foreignKey = @ForeignKey(name = "FK_TRM_VSCD_VS_PID")) 058 private TermValueSet myValueSet; 059 060 @Column(name = "VALUESET_PID", insertable = false, updatable = false, nullable = false) 061 private Long myValueSetPid; 062 063 @Transient 064 private String myValueSetUrl; 065 066 @Transient 067 private String myValueSetName; 068 069 @Column(name = "LANG", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 070 private String myLanguage; 071 072 @Column(name = "USE_SYSTEM", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 073 private String myUseSystem; 074 075 @Column(name = "USE_CODE", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 076 private String myUseCode; 077 078 @Column(name = "USE_DISPLAY", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 079 private String myUseDisplay; 080 081 @Column(name = "VAL", nullable = false, length = TermConceptDesignation.MAX_VAL_LENGTH) 082 private String myValue; 083 084 @Transient 085 private transient Integer myHashCode; 086 087 public Long getId() { 088 return myId; 089 } 090 091 public TermValueSetConcept getConcept() { 092 return myConcept; 093 } 094 095 public TermValueSetConceptDesignation setConcept(TermValueSetConcept theConcept) { 096 myConcept = theConcept; 097 return this; 098 } 099 100 public TermValueSet getValueSet() { 101 return myValueSet; 102 } 103 104 public TermValueSetConceptDesignation setValueSet(TermValueSet theValueSet) { 105 myValueSet = theValueSet; 106 return this; 107 } 108 109 public String getValueSetUrl() { 110 if (myValueSetUrl == null) { 111 myValueSetUrl = getValueSet().getUrl(); 112 } 113 114 return myValueSetUrl; 115 } 116 117 public String getValueSetName() { 118 if (myValueSetName == null) { 119 myValueSetName = getValueSet().getName(); 120 } 121 122 return myValueSetName; 123 } 124 125 public String getLanguage() { 126 return myLanguage; 127 } 128 129 public TermValueSetConceptDesignation setLanguage(String theLanguage) { 130 ValidateUtil.isNotTooLongOrThrowIllegalArgument(theLanguage, TermConceptDesignation.MAX_LENGTH, 131 "Language exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " + length(theLanguage)); 132 myLanguage = theLanguage; 133 return this; 134 } 135 136 public String getUseSystem() { 137 return myUseSystem; 138 } 139 140 public TermValueSetConceptDesignation setUseSystem(String theUseSystem) { 141 ValidateUtil.isNotTooLongOrThrowIllegalArgument(theUseSystem, TermConceptDesignation.MAX_LENGTH, 142 "Use system exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " + length(theUseSystem)); 143 myUseSystem = theUseSystem; 144 return this; 145 } 146 147 public String getUseCode() { 148 return myUseCode; 149 } 150 151 public TermValueSetConceptDesignation setUseCode(String theUseCode) { 152 ValidateUtil.isNotTooLongOrThrowIllegalArgument(theUseCode, TermConceptDesignation.MAX_LENGTH, 153 "Use code exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " + length(theUseCode)); 154 myUseCode = theUseCode; 155 return this; 156 } 157 158 public String getUseDisplay() { 159 return myUseDisplay; 160 } 161 162 public TermValueSetConceptDesignation setUseDisplay(String theUseDisplay) { 163 myUseDisplay = left(theUseDisplay, TermConceptDesignation.MAX_LENGTH); 164 return this; 165 } 166 167 public String getValue() { 168 return myValue; 169 } 170 171 public TermValueSetConceptDesignation setValue(@Nonnull String theValue) { 172 ValidateUtil.isNotBlankOrThrowIllegalArgument(theValue, "theValue must not be null or empty"); 173 ValidateUtil.isNotTooLongOrThrowIllegalArgument(theValue, TermConceptDesignation.MAX_VAL_LENGTH, 174 "Value exceeds maximum length (" + TermConceptDesignation.MAX_VAL_LENGTH + "): " + length(theValue)); 175 myValue = theValue; 176 return this; 177 } 178 179 @Override 180 public boolean equals(Object theO) { 181 if (this == theO) return true; 182 183 if (!(theO instanceof TermValueSetConceptDesignation)) return false; 184 185 TermValueSetConceptDesignation that = (TermValueSetConceptDesignation) theO; 186 187 return new EqualsBuilder() 188 .append(getLanguage(), that.getLanguage()) 189 .append(getUseSystem(), that.getUseSystem()) 190 .append(getUseCode(), that.getUseCode()) 191 .append(getUseDisplay(), that.getUseDisplay()) 192 .append(getValue(), that.getValue()) 193 .isEquals(); 194 } 195 196 @Override 197 public int hashCode() { 198 if (myHashCode == null) { 199 myHashCode = new HashCodeBuilder(17, 37) 200 .append(getLanguage()) 201 .append(getUseSystem()) 202 .append(getUseCode()) 203 .append(getUseDisplay()) 204 .append(getValue()) 205 .toHashCode(); 206 } 207 return myHashCode; 208 } 209 210 @Override 211 public String toString() { 212 return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) 213 .append("myId", myId) 214 .append(myConcept != null ? ("myConcept - id=" + myConcept.getId()) : ("myConcept=(null)")) 215 .append("myConceptPid", myConceptPid) 216 .append(myValueSet != null ? ("myValueSet - id=" + myValueSet.getId()) : ("myValueSet=(null)")) 217 .append("myValueSetPid", myValueSetPid) 218 .append("myValueSetUrl", this.getValueSetUrl()) 219 .append("myValueSetName", this.getValueSetName()) 220 .append("myLanguage", myLanguage) 221 .append("myUseSystem", myUseSystem) 222 .append("myUseCode", myUseCode) 223 .append("myUseDisplay", myUseDisplay) 224 .append("myValue", myValue) 225 .toString(); 226 } 227}