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

openmrs / openmrs-core / 29611767089

17 Jul 2026 08:35PM UTC coverage: 64.031% (+0.2%) from 63.842%
29611767089

push

github

web-flow
TRUNK-6516: Follow-up: fix tests (#6344)

15 of 15 new or added lines in 2 files covered. (100.0%)

131 existing lines in 15 files now uncovered.

24230 of 37841 relevant lines covered (64.03%)

0.64 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.FetchType;
33
import javax.persistence.ManyToOne;
34
import javax.persistence.JoinColumn;
35
import javax.persistence.Lob;
36

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

56
        private static final long serialVersionUID = 1L;
57

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

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

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

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

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

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

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

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

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

© 2026 Coveralls, Inc