• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openmrs / openmrs-core / 15275949576

27 May 2025 01:00PM UTC coverage: 65.019% (-0.02%) from 65.038%
15275949576

push

github

web-flow
Trunk 5865: FormResource Domain - Switching from Hibernate Mappings to Annotations (#4921)

* TRUNK-5865: FormResource Domain - Switching from Hibernate Mappings to Annotations

* refactored dateChanged column not to be a ManyToOne

* fixing hibernate column params and naming

* added missing annotations

* added missing annotations

* removed transient to use only annotation

* use transient to instead of annotation

* Added missing length attribute

23356 of 35922 relevant lines covered (65.02%)

0.65 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.79
/api/src/main/java/org/openmrs/FormResource.java
1
/**
2
 * This Source Code Form is subject to the terms of the Mozilla Public License,
3
 * v. 2.0. If a copy of the MPL was not distributed with this file, You can
4
 * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
5
 * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
6
 *
7
 * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
8
 * graphic logo is a trademark of OpenMRS Inc.
9
 */
10
package org.openmrs;
11

12
import java.util.Date;
13

14
import org.codehaus.jackson.annotate.JsonIgnore;
15
import org.hibernate.annotations.Cache;
16
import org.hibernate.annotations.CacheConcurrencyStrategy;
17
import org.hibernate.annotations.GenericGenerator;
18
import org.hibernate.annotations.Parameter;
19
import org.hibernate.envers.Audited;
20
import org.openmrs.customdatatype.CustomDatatypeUtil;
21
import org.openmrs.customdatatype.CustomValueDescriptor;
22
import org.openmrs.customdatatype.NotYetPersistedException;
23
import org.openmrs.customdatatype.SingleCustomValue;
24

25
import javax.persistence.Entity;
26
import javax.persistence.Table;
27
import javax.persistence.AttributeOverride;
28
import javax.persistence.Column;
29
import javax.persistence.Id;
30
import javax.persistence.GeneratedValue;
31
import javax.persistence.GenerationType;
32
import javax.persistence.ManyToOne;
33
import javax.persistence.JoinColumn;
34
import javax.persistence.Lob;
35

36
/**
37
 * A FormResource is meant as a way for modules to add arbitrary information to
38
 * a Form. FormResources are essentially just key-value pairs. The value is
39
 * stored as a custom datatype. A Form can have 0-n FormResources but only one
40
 * FormResource per name per Form.
41
 *
42
 * The <i>name</i> of a resource specifies one of many resources that can be
43
 * stored for a particular owner. Only one resource for each name will
44
 * ever be saved.
45
 *
46
 * @since 1.9
47
 */
48
@Entity
49
@Table(name = "form_resource")
50
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
51
@AttributeOverride(name = "uuid", column = @Column(name = "uuid", unique = true, nullable = false, length = 38))
52
@Audited
53
public class FormResource extends BaseOpenmrsObject implements CustomValueDescriptor, SingleCustomValue<FormResource> {
54

55
        private static final long serialVersionUID = 1L;
56

57
        @Id
58
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "form_resource_form_resource_id_seq")
59
        @GenericGenerator(
60
                name = "form_resource_form_resource_id_seq",
61
                strategy = "native",
62
                parameters = @Parameter(name = "sequence", value = "form_resource_form_resource_id_seq")
63
        )
64
        @Column(name = "form_resource_id")
65
        private Integer formResourceId;
66

67
        @ManyToOne
68
        @JoinColumn(name = "form_id", nullable = false)
69
        private Form form;
70

71
        @Column(name = "name", length = 255, nullable = true)
72
        private String name;
73

74
        @Lob
75
        @Column(name = "value_reference", length = 65535, nullable = true)
76
        private String valueReference;
77

78
        @Column(name = "datatype", length = 255)
79
        private String datatypeClassname;
80

81
        @Lob
82
        @Column(name = "datatype_config", length = 65535)
83
        private String datatypeConfig;
84

85
        @Column(name = "preferred_handler", length = 255)
86
        private String preferredHandlerClassname;
87

88
        @Lob
89
        @Column(name = "handler_config", length = 65535)
90
        private String handlerConfig;
91
        
92
        private transient boolean dirty = false;
1✔
93
        
94
        private transient Object typedValue;
95

96
        @ManyToOne
97
        @JoinColumn(name = "changed_by")
98
        private User changedBy;
99
        
100
        @Column(name = "date_changed", length = 19)
101
        private Date dateChanged;
102
        
103
        public FormResource() {
1✔
104
                // generic constructor
105
        }
1✔
106
        
107
        /**
108
         * Create a copy of a provided FormResource, ignoring the uuid and id of the original
109
         *
110
         * @param old the original FormResource to be copied
111
         */
112
        public FormResource(FormResource old) {
1✔
113
                this.form = old.getForm();
1✔
114
                this.name = old.getName();
1✔
115
                this.valueReference = old.getValueReference();
1✔
116
                this.datatypeClassname = old.getDatatypeClassname();
1✔
117
                this.datatypeConfig = old.getDatatypeConfig();
1✔
118
                this.preferredHandlerClassname = old.getPreferredHandlerClassname();
1✔
119
                this.handlerConfig = old.getHandlerConfig();
1✔
120
        }
1✔
121
        
122
        /**
123
         * @see org.openmrs.OpenmrsObject#getId()
124
         */
125
        @Override
126
        public Integer getId() {
127
                return getFormResourceId();
×
128
        }
129
        
130
        /**
131
         * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
132
         */
133
        @Override
134
        public void setId(Integer id) {
135
                setFormResourceId(id);
×
136
        }
×
137
        
138
        /**
139
         * gets the form
140
         *
141
         * @return the form
142
         */
143
        public Form getForm() {
144
                return form;
1✔
145
        }
146
        
147
        /**
148
         * sets the form
149
         *
150
         * @param form the form
151
         */
152
        public void setForm(Form form) {
153
                this.form = form;
1✔
154
        }
1✔
155
        
156
        /**
157
         * gets the form resource id
158
         *
159
         * @return the form resource's id
160
         */
161
        public Integer getFormResourceId() {
162
                return formResourceId;
1✔
163
        }
164
        
165
        /**
166
         * sets the form resource id
167
         *
168
         * @param formResourceId the form resource's id
169
         */
170
        public void setFormResourceId(Integer formResourceId) {
171
                this.formResourceId = formResourceId;
×
172
        }
×
173
        
174
        /**
175
         * gets the name of the resource
176
         *
177
         * @return the name of the resource
178
         */
179
        public String getName() {
180
                return name;
1✔
181
        }
182
        
183
        /**
184
         * sets the name of the resource
185
         *
186
         * @param name the name of the resource
187
         */
188
        public void setName(String name) {
189
                this.name = name;
1✔
190
        }
1✔
191
        
192
        /**
193
         * @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeClassname()
194
         */
195
        @Override
196
        public String getDatatypeClassname() {
197
                return datatypeClassname;
1✔
198
        }
199
        
200
        /**
201
         * @param datatypeClassname the datatypeClassname to set
202
         */
203
        public void setDatatypeClassname(String datatypeClassname) {
204
                this.datatypeClassname = datatypeClassname;
1✔
205
        }
1✔
206
        
207
        /**
208
         * @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeConfig()
209
         */
210
        @Override
211
        public String getDatatypeConfig() {
212
                return datatypeConfig;
1✔
213
        }
214
        
215
        /**
216
         * @param datatypeConfig the datatypeConfig to set
217
         */
218
        public void setDatatypeConfig(String datatypeConfig) {
219
                this.datatypeConfig = datatypeConfig;
1✔
220
        }
1✔
221
        
222
        /**
223
         * @see org.openmrs.customdatatype.CustomValueDescriptor#getPreferredHandlerClassname()
224
         */
225
        @Override
226
        public String getPreferredHandlerClassname() {
227
                return preferredHandlerClassname;
1✔
228
        }
229
        
230
        /**
231
         * @param preferredHandlerClassname the preferredHandlerClassname to set
232
         */
233
        public void setPreferredHandlerClassname(String preferredHandlerClassname) {
234
                this.preferredHandlerClassname = preferredHandlerClassname;
1✔
235
        }
1✔
236
        
237
        /**
238
         * @see org.openmrs.customdatatype.CustomValueDescriptor#getHandlerConfig()
239
         */
240
        @Override
241
        public String getHandlerConfig() {
242
                return handlerConfig;
1✔
243
        }
244
        
245
        /**
246
         * @param handlerConfig the handlerConfig to set
247
         */
248
        public void setHandlerConfig(String handlerConfig) {
249
                this.handlerConfig = handlerConfig;
×
250
        }
×
251
        
252
        /**
253
         * @see org.openmrs.customdatatype.SingleCustomValue#getDescriptor()
254
         */
255
        @Override
256
        public FormResource getDescriptor() {
257
                return this;
1✔
258
        }
259
        
260
        /**
261
         * @see org.openmrs.customdatatype.SingleCustomValue#getValueReference()
262
         */
263
        @Override
264
        public String getValueReference() {
265
                if (valueReference == null) {
1✔
266
                        throw new NotYetPersistedException();
1✔
267
                } else {
268
                        return valueReference;
1✔
269
                }
270
        }
271
        
272
        /**
273
         * @see org.openmrs.customdatatype.SingleCustomValue#getValue()
274
         */
275
        @Override
276
        public Object getValue(){
277
                if (typedValue == null) {
1✔
278
                        typedValue = CustomDatatypeUtil.getDatatype(this).fromReferenceString(getValueReference());
1✔
279
                }
280
                return typedValue;
1✔
281
        }
282
        
283
        /**
284
         * @see org.openmrs.customdatatype.SingleCustomValue#setValue(java.lang.Object)
285
         */
286
        @Override
287
        public <T> void setValue(T typedValue)  {
288
                this.typedValue = typedValue;
1✔
289
                dirty = true;
1✔
290
        }
1✔
291
        
292
        /**
293
         * @see org.openmrs.customdatatype.SingleCustomValue#setValueReferenceInternal(java.lang.String)
294
         */
295
        @Override
296
        public void setValueReferenceInternal(String valueToPersist)  {
297
                this.valueReference = valueToPersist;
1✔
298
        }
1✔
299
        
300
        /**
301
         * @see org.openmrs.customdatatype.SingleCustomValue#isDirty()
302
         *
303
         * @deprecated as of 2.0, use {@link #getDirty()}
304
         */
305
        @Deprecated
306
        @JsonIgnore
307
        @Override
308
        public boolean isDirty() {
309
                return getDirty();
1✔
310
        }
311
        
312
        public boolean getDirty() {
313
                return dirty;
1✔
314
        }
315
        
316
        /**
317
         * @return Returns the changedBy.
318
         */
319
        public User getChangedBy() {
320
                return changedBy;
×
321
        }
322
        
323
        /**
324
         * @param changedBy The user that changed this object
325
         */
326
        public void setChangedBy(User changedBy) {
327
                this.changedBy = changedBy;
×
328
        }
×
329
        
330
        /**
331
         * @return Returns the date this object was changed
332
         */
333
        public Date getDateChanged() {
334
                return dateChanged;
×
335
        }
336
        
337
        /**
338
         * @param dateChanged The date this object was changed
339
         */
340
        public void setDateChanged(Date dateChanged) {
341
                this.dateChanged = dateChanged;
×
342
        }
×
343
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc