001/*- 002 * #%L 003 * HAPI FHIR JPA Model 004 * %% 005 * Copyright (C) 2014 - 2025 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.model.entity; 021 022import ca.uhn.fhir.context.FhirVersionEnum; 023import ca.uhn.fhir.util.StringUtil; 024import jakarta.persistence.Column; 025import jakarta.persistence.Entity; 026import jakarta.persistence.EnumType; 027import jakarta.persistence.Enumerated; 028import jakarta.persistence.ForeignKey; 029import jakarta.persistence.GeneratedValue; 030import jakarta.persistence.GenerationType; 031import jakarta.persistence.Id; 032import jakarta.persistence.Index; 033import jakarta.persistence.JoinColumn; 034import jakarta.persistence.JoinColumns; 035import jakarta.persistence.ManyToOne; 036import jakarta.persistence.OneToMany; 037import jakarta.persistence.SequenceGenerator; 038import jakarta.persistence.Table; 039import jakarta.persistence.Temporal; 040import jakarta.persistence.TemporalType; 041import jakarta.persistence.Version; 042import org.apache.commons.lang3.builder.ToStringBuilder; 043import org.apache.commons.lang3.builder.ToStringStyle; 044import org.hibernate.annotations.JdbcTypeCode; 045import org.hibernate.type.SqlTypes; 046 047import java.util.Date; 048import java.util.List; 049 050@Entity() 051@Table( 052 name = "NPM_PACKAGE_VER", 053 uniqueConstraints = {}, 054 indexes = { 055 @Index(name = "IDX_PACKVER", columnList = "PACKAGE_ID,VERSION_ID", unique = true), 056 @Index(name = "FK_NPM_PKV_PKG", columnList = "PACKAGE_PID"), 057 @Index(name = "FK_NPM_PKV_RESID", columnList = "BINARY_RES_ID") 058 }) 059public class NpmPackageVersionEntity { 060 061 public static final int VERSION_ID_LENGTH = 200; 062 public static final int PACKAGE_DESC_LENGTH = 512; 063 public static final int FHIR_VERSION_LENGTH = 10; 064 public static final int FHIR_VERSION_ID_LENGTH = 20; 065 066 @SequenceGenerator(name = "SEQ_NPM_PACKVER", sequenceName = "SEQ_NPM_PACKVER") 067 @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_NPM_PACKVER") 068 @Id 069 @Column(name = "PID") 070 private Long myId; 071 072 @Column(name = "PACKAGE_ID", length = NpmPackageEntity.PACKAGE_ID_LENGTH, nullable = false) 073 private String myPackageId; 074 075 @Column(name = "VERSION_ID", length = NpmPackageVersionEntity.VERSION_ID_LENGTH, nullable = false) 076 private String myVersionId; 077 078 @ManyToOne 079 @JoinColumn(name = "PACKAGE_PID", nullable = false, foreignKey = @ForeignKey(name = "FK_NPM_PKV_PKG")) 080 private NpmPackageEntity myPackage; 081 082 @ManyToOne 083 @JoinColumns( 084 value = { 085 @JoinColumn( 086 name = "BINARY_RES_ID", 087 referencedColumnName = "RES_ID", 088 insertable = false, 089 updatable = false, 090 nullable = false), 091 @JoinColumn( 092 name = "PARTITION_ID", 093 referencedColumnName = "PARTITION_ID", 094 insertable = false, 095 updatable = false, 096 nullable = false) 097 }, 098 foreignKey = @ForeignKey(name = "FK_NPM_PKV_RESID")) 099 private ResourceTable myPackageBinary; 100 101 @Column(name = "BINARY_RES_ID", nullable = false) 102 private Long myPackageBinaryResourceId; 103 104 @Column(name = "PARTITION_ID", nullable = true) 105 private Integer myPackageBinaryPartitionId; 106 107 @Temporal(TemporalType.TIMESTAMP) 108 @Column(name = "SAVED_TIME", nullable = false) 109 private Date mySavedTime; 110 111 @Column(name = "PKG_DESC", nullable = true, length = PACKAGE_DESC_LENGTH) 112 private String myDescription; 113 114 @Column(name = "DESC_UPPER", nullable = true, length = PACKAGE_DESC_LENGTH) 115 private String myDescriptionUpper; 116 117 @Column(name = "PKG_AUTHOR", nullable = true, length = PACKAGE_DESC_LENGTH) 118 private String myAuthor; 119 120 @Column(name = "AUTHOR_UPPER", nullable = true, length = PACKAGE_DESC_LENGTH) 121 private String myAuthorUpper; 122 123 @Column(name = "CURRENT_VERSION", nullable = false) 124 private boolean myCurrentVersion; 125 126 @Column(name = "FHIR_VERSION_ID", length = NpmPackageVersionEntity.FHIR_VERSION_ID_LENGTH, nullable = false) 127 private String myFhirVersionId; 128 129 @Enumerated(EnumType.STRING) 130 @JdbcTypeCode(SqlTypes.VARCHAR) 131 @Column(name = "FHIR_VERSION", length = NpmPackageVersionEntity.FHIR_VERSION_LENGTH, nullable = false) 132 private FhirVersionEnum myFhirVersion; 133 134 @Column(name = "PACKAGE_SIZE_BYTES", nullable = false) 135 private long myPackageSizeBytes; 136 137 @Temporal(TemporalType.TIMESTAMP) 138 @Version 139 @Column(name = "UPDATED_TIME", nullable = false) 140 private Date myUpdatedTime; 141 142 @OneToMany(mappedBy = "myPackageVersion") 143 private List<NpmPackageVersionResourceEntity> myResources; 144 145 public Date getUpdatedTime() { 146 return myUpdatedTime; 147 } 148 149 public long getPackageSizeBytes() { 150 return myPackageSizeBytes; 151 } 152 153 public void setPackageSizeBytes(long thePackageSizeBytes) { 154 myPackageSizeBytes = thePackageSizeBytes; 155 } 156 157 public boolean isCurrentVersion() { 158 return myCurrentVersion; 159 } 160 161 public void setCurrentVersion(boolean theCurrentVersion) { 162 myCurrentVersion = theCurrentVersion; 163 } 164 165 public String getPackageId() { 166 return myPackageId; 167 } 168 169 public void setPackageId(String thePackageId) { 170 myPackageId = thePackageId; 171 } 172 173 public String getVersionId() { 174 return myVersionId; 175 } 176 177 public void setVersionId(String theVersionId) { 178 myVersionId = theVersionId; 179 } 180 181 public String getFhirVersionId() { 182 return myFhirVersionId; 183 } 184 185 public void setFhirVersionId(String theFhirVersionId) { 186 myFhirVersionId = theFhirVersionId; 187 } 188 189 public FhirVersionEnum getFhirVersion() { 190 return myFhirVersion; 191 } 192 193 public void setFhirVersion(FhirVersionEnum theFhirVersion) { 194 myFhirVersion = theFhirVersion; 195 } 196 197 public NpmPackageEntity getPackage() { 198 return myPackage; 199 } 200 201 public void setPackage(NpmPackageEntity thePackage) { 202 myPackage = thePackage; 203 } 204 205 public ResourceTable getPackageBinary() { 206 return myPackageBinary; 207 } 208 209 public void setPackageBinary(ResourceTable thePackageBinary) { 210 myPackageBinary = thePackageBinary; 211 myPackageBinaryResourceId = thePackageBinary.getId().getId(); 212 myPackageBinaryPartitionId = thePackageBinary.getPersistentId().getPartitionId(); 213 } 214 215 public void setSavedTime(Date theSavedTime) { 216 mySavedTime = theSavedTime; 217 } 218 219 public String getDescription() { 220 return myDescription; 221 } 222 223 public void setDescription(String theDescription) { 224 myDescription = theDescription; 225 myDescriptionUpper = StringUtil.normalizeStringForSearchIndexing(theDescription); 226 } 227 228 public String getAuthor() { 229 return myAuthor; 230 } 231 232 public void setAuthor(String theAuthor) { 233 myAuthor = theAuthor; 234 myAuthorUpper = StringUtil.normalizeStringForSearchIndexing(theAuthor); 235 } 236 237 @Override 238 public String toString() { 239 return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) 240 .append("myId", myId) 241 .append("myPackageId", myPackageId) 242 .append("myVersionId", myVersionId) 243 .append("myDescriptionUpper", myDescriptionUpper) 244 .append("myFhirVersionId", myFhirVersionId) 245 .toString(); 246 } 247 248 public List<NpmPackageVersionResourceEntity> getResources() { 249 return myResources; 250 } 251}