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 java.io.Serializable; 029import javax.annotation.Nonnull; 030import javax.persistence.*; 031 032import static org.apache.commons.lang3.StringUtils.left; 033import static org.apache.commons.lang3.StringUtils.length; 034 035@Table( 036 name = "TRM_VALUESET_C_DESIGNATION", 037 indexes = { 038 // must have same name that indexed FK or SchemaMigrationTest complains because H2 sets this index 039 // automatically 040 @Index(name = "FK_TRM_VALUESET_CONCEPT_PID", columnList = "VALUESET_CONCEPT_PID", unique = false), 041 @Index(name = "FK_TRM_VSCD_VS_PID", columnList = "VALUESET_PID") 042 }) 043@Entity() 044public class TermValueSetConceptDesignation implements Serializable { 045 private static final long serialVersionUID = 1L; 046 047 @Id() 048 @SequenceGenerator(name = "SEQ_VALUESET_C_DSGNTN_PID", sequenceName = "SEQ_VALUESET_C_DSGNTN_PID") 049 @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_VALUESET_C_DSGNTN_PID") 050 @Column(name = "PID") 051 private Long myId; 052 053 @ManyToOne(fetch = FetchType.LAZY) 054 @JoinColumn( 055 name = "VALUESET_CONCEPT_PID", 056 referencedColumnName = "PID", 057 nullable = false, 058 foreignKey = @ForeignKey(name = "FK_TRM_VALUESET_CONCEPT_PID")) 059 private TermValueSetConcept myConcept; 060 061 @Column(name = "VALUESET_CONCEPT_PID", insertable = false, updatable = false, nullable = false) 062 private Long myConceptPid; 063 064 @ManyToOne(fetch = FetchType.LAZY) 065 @JoinColumn( 066 name = "VALUESET_PID", 067 referencedColumnName = "PID", 068 nullable = false, 069 foreignKey = @ForeignKey(name = "FK_TRM_VSCD_VS_PID")) 070 private TermValueSet myValueSet; 071 072 @Column(name = "VALUESET_PID", insertable = false, updatable = false, nullable = false) 073 private Long myValueSetPid; 074 075 @Transient 076 private String myValueSetUrl; 077 078 @Transient 079 private String myValueSetName; 080 081 @Column(name = "LANG", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 082 private String myLanguage; 083 084 @Column(name = "USE_SYSTEM", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 085 private String myUseSystem; 086 087 @Column(name = "USE_CODE", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 088 private String myUseCode; 089 090 @Column(name = "USE_DISPLAY", nullable = true, length = TermConceptDesignation.MAX_LENGTH) 091 private String myUseDisplay; 092 093 @Column(name = "VAL", nullable = false, length = TermConceptDesignation.MAX_VAL_LENGTH) 094 private String myValue; 095 096 @Transient 097 private transient Integer myHashCode; 098 099 public Long getId() { 100 return myId; 101 } 102 103 public TermValueSetConcept getConcept() { 104 return myConcept; 105 } 106 107 public TermValueSetConceptDesignation setConcept(TermValueSetConcept theConcept) { 108 myConcept = theConcept; 109 return this; 110 } 111 112 public TermValueSet getValueSet() { 113 return myValueSet; 114 } 115 116 public TermValueSetConceptDesignation setValueSet(TermValueSet theValueSet) { 117 myValueSet = theValueSet; 118 return this; 119 } 120 121 public String getValueSetUrl() { 122 if (myValueSetUrl == null) { 123 myValueSetUrl = getValueSet().getUrl(); 124 } 125 126 return myValueSetUrl; 127 } 128 129 public String getValueSetName() { 130 if (myValueSetName == null) { 131 myValueSetName = getValueSet().getName(); 132 } 133 134 return myValueSetName; 135 } 136 137 public String getLanguage() { 138 return myLanguage; 139 } 140 141 public TermValueSetConceptDesignation setLanguage(String theLanguage) { 142 ValidateUtil.isNotTooLongOrThrowIllegalArgument( 143 theLanguage, 144 TermConceptDesignation.MAX_LENGTH, 145 "Language exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " + length(theLanguage)); 146 myLanguage = theLanguage; 147 return this; 148 } 149 150 public String getUseSystem() { 151 return myUseSystem; 152 } 153 154 public TermValueSetConceptDesignation setUseSystem(String theUseSystem) { 155 ValidateUtil.isNotTooLongOrThrowIllegalArgument( 156 theUseSystem, 157 TermConceptDesignation.MAX_LENGTH, 158 "Use system exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " 159 + length(theUseSystem)); 160 myUseSystem = theUseSystem; 161 return this; 162 } 163 164 public String getUseCode() { 165 return myUseCode; 166 } 167 168 public TermValueSetConceptDesignation setUseCode(String theUseCode) { 169 ValidateUtil.isNotTooLongOrThrowIllegalArgument( 170 theUseCode, 171 TermConceptDesignation.MAX_LENGTH, 172 "Use code exceeds maximum length (" + TermConceptDesignation.MAX_LENGTH + "): " + length(theUseCode)); 173 myUseCode = theUseCode; 174 return this; 175 } 176 177 public String getUseDisplay() { 178 return myUseDisplay; 179 } 180 181 public TermValueSetConceptDesignation setUseDisplay(String theUseDisplay) { 182 myUseDisplay = left(theUseDisplay, TermConceptDesignation.MAX_LENGTH); 183 return this; 184 } 185 186 public String getValue() { 187 return myValue; 188 } 189 190 public TermValueSetConceptDesignation setValue(@Nonnull String theValue) { 191 ValidateUtil.isNotBlankOrThrowIllegalArgument(theValue, "theValue must not be null or empty"); 192 ValidateUtil.isNotTooLongOrThrowIllegalArgument( 193 theValue, 194 TermConceptDesignation.MAX_VAL_LENGTH, 195 "Value exceeds maximum length (" + TermConceptDesignation.MAX_VAL_LENGTH + "): " + length(theValue)); 196 myValue = theValue; 197 return this; 198 } 199 200 @Override 201 public boolean equals(Object theO) { 202 if (this == theO) return true; 203 204 if (!(theO instanceof TermValueSetConceptDesignation)) return false; 205 206 TermValueSetConceptDesignation that = (TermValueSetConceptDesignation) theO; 207 208 return new EqualsBuilder() 209 .append(getLanguage(), that.getLanguage()) 210 .append(getUseSystem(), that.getUseSystem()) 211 .append(getUseCode(), that.getUseCode()) 212 .append(getUseDisplay(), that.getUseDisplay()) 213 .append(getValue(), that.getValue()) 214 .isEquals(); 215 } 216 217 @Override 218 public int hashCode() { 219 if (myHashCode == null) { 220 myHashCode = new HashCodeBuilder(17, 37) 221 .append(getLanguage()) 222 .append(getUseSystem()) 223 .append(getUseCode()) 224 .append(getUseDisplay()) 225 .append(getValue()) 226 .toHashCode(); 227 } 228 return myHashCode; 229 } 230 231 @Override 232 public String toString() { 233 return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) 234 .append("myId", myId) 235 .append(myConcept != null ? ("myConcept - id=" + myConcept.getId()) : ("myConcept=(null)")) 236 .append("myConceptPid", myConceptPid) 237 .append(myValueSet != null ? ("myValueSet - id=" + myValueSet.getId()) : ("myValueSet=(null)")) 238 .append("myValueSetPid", myValueSetPid) 239 .append("myValueSetUrl", this.getValueSetUrl()) 240 .append("myValueSetName", this.getValueSetName()) 241 .append("myLanguage", myLanguage) 242 .append("myUseSystem", myUseSystem) 243 .append("myUseCode", myUseCode) 244 .append("myUseDisplay", myUseDisplay) 245 .append("myValue", myValue) 246 .toString(); 247 } 248}