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