
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.i18n.Msg; 023import ca.uhn.fhir.rest.server.exceptions.InternalErrorException; 024import org.apache.commons.io.IOUtils; 025import org.hibernate.annotations.Immutable; 026import org.hibernate.annotations.Subselect; 027 028import java.io.IOException; 029import java.io.Reader; 030import java.io.Serializable; 031import java.sql.Clob; 032import java.sql.SQLException; 033import javax.persistence.Column; 034import javax.persistence.Entity; 035import javax.persistence.Id; 036import javax.persistence.Lob; 037 038@Entity 039@Immutable 040@Subselect( 041 /* 042 * Note about the CONCAT function below- We need a primary key (an @Id) column 043 * because hibernate won't allow the view the function without it, but 044 */ 045 "SELECT CONCAT_WS(' ', vsc.PID, vscd.PID) AS PID, " + " vsc.PID AS CONCEPT_PID, " 046 + " vsc.VALUESET_PID AS CONCEPT_VALUESET_PID, " 047 + " vsc.VALUESET_ORDER AS CONCEPT_VALUESET_ORDER, " 048 + " vsc.SYSTEM_URL AS CONCEPT_SYSTEM_URL, " 049 + " vsc.CODEVAL AS CONCEPT_CODEVAL, " 050 + " vsc.DISPLAY AS CONCEPT_DISPLAY, " 051 + " vsc.SYSTEM_VER AS SYSTEM_VER, " 052 + " vsc.SOURCE_PID AS SOURCE_PID, " 053 + " vsc.SOURCE_DIRECT_PARENT_PIDS AS SOURCE_DIRECT_PARENT_PIDS, " 054 + " vscd.PID AS DESIGNATION_PID, " 055 + " vscd.LANG AS DESIGNATION_LANG, " 056 + " vscd.USE_SYSTEM AS DESIGNATION_USE_SYSTEM, " 057 + " vscd.USE_CODE AS DESIGNATION_USE_CODE, " 058 + " vscd.USE_DISPLAY AS DESIGNATION_USE_DISPLAY, " 059 + " vscd.VAL AS DESIGNATION_VAL " 060 + "FROM TRM_VALUESET_CONCEPT vsc " 061 + "LEFT OUTER JOIN TRM_VALUESET_C_DESIGNATION vscd ON vsc.PID = vscd.VALUESET_CONCEPT_PID") 062public class TermValueSetConceptView implements Serializable, ITermValueSetConceptView { 063 private static final long serialVersionUID = 1L; 064 065 @Id 066 @Column(name = "PID", length = 1000 /* length only needed to satisfy JpaEntityTest, it's not used*/) 067 private String id; // still set automatically 068 069 @Column(name = "CONCEPT_PID") 070 private Long myConceptPid; 071 072 @Column(name = "CONCEPT_VALUESET_PID") 073 private Long myConceptValueSetPid; 074 075 @Column(name = "CONCEPT_VALUESET_ORDER") 076 private int myConceptOrder; 077 078 @Column(name = "CONCEPT_SYSTEM_URL", length = TermCodeSystem.MAX_URL_LENGTH) 079 private String myConceptSystemUrl; 080 081 @Column(name = "CONCEPT_CODEVAL", length = TermConcept.MAX_CODE_LENGTH) 082 private String myConceptCode; 083 084 @Column(name = "CONCEPT_DISPLAY", length = TermConcept.MAX_DESC_LENGTH) 085 private String myConceptDisplay; 086 087 @Column(name = "SYSTEM_VER", length = TermCodeSystemVersion.MAX_VERSION_LENGTH) 088 private String myConceptSystemVersion; 089 090 @Column(name = "DESIGNATION_PID") 091 private Long myDesignationPid; 092 093 @Column(name = "DESIGNATION_LANG", length = TermConceptDesignation.MAX_LENGTH) 094 private String myDesignationLang; 095 096 @Column(name = "DESIGNATION_USE_SYSTEM", length = TermConceptDesignation.MAX_LENGTH) 097 private String myDesignationUseSystem; 098 099 @Column(name = "DESIGNATION_USE_CODE", length = TermConceptDesignation.MAX_LENGTH) 100 private String myDesignationUseCode; 101 102 @Column(name = "DESIGNATION_USE_DISPLAY", length = TermConceptDesignation.MAX_LENGTH) 103 private String myDesignationUseDisplay; 104 105 @Column(name = "DESIGNATION_VAL", length = TermConceptDesignation.MAX_VAL_LENGTH) 106 private String myDesignationVal; 107 108 @Column(name = "SOURCE_PID", nullable = true) 109 private Long mySourceConceptPid; 110 111 @Lob 112 @Column(name = "SOURCE_DIRECT_PARENT_PIDS", nullable = true) 113 private Clob mySourceConceptDirectParentPids; 114 115 @Override 116 public Long getSourceConceptPid() { 117 return mySourceConceptPid; 118 } 119 120 @Override 121 public String getSourceConceptDirectParentPids() { 122 if (mySourceConceptDirectParentPids != null) { 123 try (Reader characterStream = mySourceConceptDirectParentPids.getCharacterStream()) { 124 return IOUtils.toString(characterStream); 125 } catch (IOException | SQLException e) { 126 throw new InternalErrorException(Msg.code(828) + e); 127 } 128 } 129 return null; 130 } 131 132 @Override 133 public Long getConceptPid() { 134 return myConceptPid; 135 } 136 137 @Override 138 public String getConceptSystemUrl() { 139 return myConceptSystemUrl; 140 } 141 142 @Override 143 public String getConceptCode() { 144 return myConceptCode; 145 } 146 147 @Override 148 public String getConceptDisplay() { 149 return myConceptDisplay; 150 } 151 152 @Override 153 public Long getDesignationPid() { 154 return myDesignationPid; 155 } 156 157 @Override 158 public String getDesignationLang() { 159 return myDesignationLang; 160 } 161 162 @Override 163 public String getDesignationUseSystem() { 164 return myDesignationUseSystem; 165 } 166 167 @Override 168 public String getDesignationUseCode() { 169 return myDesignationUseCode; 170 } 171 172 @Override 173 public String getDesignationUseDisplay() { 174 return myDesignationUseDisplay; 175 } 176 177 @Override 178 public String getDesignationVal() { 179 return myDesignationVal; 180 } 181 182 @Override 183 public String getConceptSystemVersion() { 184 return myConceptSystemVersion; 185 } 186}