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

openmrs / openmrs-core / 31843719412

14 Aug 2026 09:43PM UTC coverage: 64.329% (+0.007%) from 64.322%
31843719412

push

github

ibacher
TRUNK-6717: Replace reflective BeanUtils property access with direct PersonName getters (#6431)

11 of 11 new or added lines in 1 file covered. (100.0%)

60 existing lines in 11 files now uncovered.

24629 of 38286 relevant lines covered (64.33%)

0.64 hits per line

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

89.73
/api/src/main/java/org/openmrs/PersonAddress.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 org.apache.commons.lang3.StringUtils;
13
import org.apache.commons.lang3.builder.EqualsBuilder;
14
import org.codehaus.jackson.annotate.JsonIgnore;
15
import org.hibernate.annotations.Cache;
16
import org.hibernate.annotations.CacheConcurrencyStrategy;
17
import org.hibernate.envers.Audited;
18
import org.openmrs.util.OpenmrsUtil;
19

20
import javax.persistence.Cacheable;
21
import javax.persistence.Column;
22
import javax.persistence.Entity;
23
import javax.persistence.FetchType;
24
import javax.persistence.GeneratedValue;
25
import javax.persistence.GenerationType;
26
import javax.persistence.Id;
27
import javax.persistence.JoinColumn;
28
import javax.persistence.ManyToOne;
29
import javax.persistence.Table;
30
import java.util.Calendar;
31
import java.util.Date;
32

33
import static org.apache.commons.lang3.StringUtils.defaultString;
34

35
/**
36
 * This class is the representation of a person's address. This class is many-to-one to the Person
37
 * class, so a Person/Patient/User can have zero to n addresses
38
 */
39
@Entity
40
@Table(name = "person_address")
41
@Audited
42
@Cacheable
43
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
44
public class PersonAddress extends BaseChangeableOpenmrsData implements java.io.Serializable, Cloneable, Comparable<PersonAddress>, Address {
45
        
46
        public static final long serialVersionUID = 343333L;
47
        
48
        // Fields
49
        @Id
50
        @Column(name = "person_address_id")
51
        @GeneratedValue(strategy = GenerationType.IDENTITY)
52
        private Integer personAddressId;
53
        
54
        @ManyToOne(fetch = FetchType.LAZY)
55
        @JoinColumn(name = "person_id")
56
        private Person person;
57
        
58
        @Column(name = "preferred", length = 1, nullable = false)
1✔
59
        private Boolean preferred = false;
1✔
60
        
61
        @Column(name = "address1")
62
        private String address1;
63
        
64
        @Column(name = "address2")
65
        private String address2;
66
        
67
        @Column(name = "address3")
68
        private String address3;
69
        
70
        @Column(name = "address4")
71
        private String address4;
72
        
73
        @Column(name = "address5")
74
        private String address5;
75
        
76
        @Column(name = "address6")
77
        private String address6;
78
        
79
        @Column(name = "address7")
80
        private String address7;
81
        
82
        @Column(name = "address8")
83
        private String address8;
84
        
85
        @Column(name = "address9")
86
        private String address9;
87
        
88
        @Column(name = "address10")
89
        private String address10;
90
        
91
        @Column(name = "address11")
92
        private String address11;
93
        
94
        @Column(name = "address12")
95
        private String address12;
96
        
97
        @Column(name = "address13")
98
        private String address13;
99
        
100
        @Column(name = "address14")
101
        private String address14;
102
        
103
        @Column(name = "address15")
104
        private String address15;
105

106
        @Column(name = "city_village")
107
        private String cityVillage;
108

109
        @Column(name = "county_district")
110
        private String countyDistrict;
111

112
        @Column(name = "state_province")
113
        private String stateProvince;
114

115
        @Column(name = "country")
116
        private String country;
117

118
        @Column(name = "postal_code", length = 50)
119
        private String postalCode;
120

121
        @Column(name = "latitude", length = 50)
122
        private String latitude;
123
        
124
        @Column(name = "longitude", length = 50)
125
        private String longitude;
126
        
127
        @Column(name = "start_date", length = 19)
128
        private Date startDate;
129
        
130
        @Column(name = "end_date", length = 19)
131
        private Date endDate;
132
        
133
        // Constructors
134
        
135
        /** default constructor */
136
        public PersonAddress() {
1✔
137
        }
1✔
138
        
139
        /** constructor with id */
140
        public PersonAddress(Integer personAddressId) {
×
141
                this.personAddressId = personAddressId;
×
UNCOV
142
        }
×
143
        
144
        /**
145
         * @see java.lang.Object#toString()
146
         */
147
        @Override
148
        public String toString() {
149
                return "a1:" + getAddress1() + ", a2:" + getAddress2() + ", cv:" +
1✔
150
                                getCityVillage() + ", sp:" + getStateProvince() + ", c:" + getCountry() +
1✔
151
                                ", cd:" + getCountyDistrict() + ", nc:" + getAddress3() + ", pc:" +
1✔
152
                                getPostalCode() + ", lat:" + getLatitude() + ", long:" + getLongitude();
1✔
153
        }
154
        
155
        /**
156
         * Compares this PersonAddress object to the given otherAddress. This method differs from
157
         * {@link #equals(Object)} in that this method compares the inner fields of each address for
158
         * equality. Note: Null/empty fields on <code>otherAddress</code> /will not/ cause a false value
159
         * to be returned
160
         *
161
         * @param otherAddress PersonAddress with which to compare
162
         * @return boolean true/false whether or not they are the same addresses
163
         */
164
        public boolean equalsContent(PersonAddress otherAddress) {
165
                return new EqualsBuilder().append(defaultString(otherAddress.getAddress1()), defaultString(address1)).append(
1✔
166
                    defaultString(otherAddress.getAddress2()), defaultString(address2)).append(
1✔
167
                    defaultString(otherAddress.getAddress3()), defaultString(address3)).append(
1✔
168
                    defaultString(otherAddress.getAddress4()), defaultString(address4)).append(
1✔
169
                    defaultString(otherAddress.getAddress5()), defaultString(address5)).append(
1✔
170
                    defaultString(otherAddress.getAddress6()), defaultString(address6)).append(
1✔
171
                    defaultString(otherAddress.getAddress7()), defaultString(address7)).append(
1✔
172
                    defaultString(otherAddress.getAddress8()), defaultString(address8)).append(
1✔
173
                    defaultString(otherAddress.getAddress9()), defaultString(address9)).append(
1✔
174
                    defaultString(otherAddress.getAddress10()), defaultString(address10)).append(
1✔
175
                    defaultString(otherAddress.getAddress11()), defaultString(address11)).append(
1✔
176
                    defaultString(otherAddress.getAddress12()), defaultString(address12)).append(
1✔
177
                    defaultString(otherAddress.getAddress13()), defaultString(address13)).append(
1✔
178
                    defaultString(otherAddress.getAddress14()), defaultString(address14)).append(
1✔
179
                    defaultString(otherAddress.getAddress15()), defaultString(address15)).append(
1✔
180
                    defaultString(otherAddress.getCityVillage()), defaultString(cityVillage)).append(
1✔
181
                    defaultString(otherAddress.getCountyDistrict()), defaultString(countyDistrict)).append(
1✔
182
                    defaultString(otherAddress.getStateProvince()), defaultString(stateProvince)).append(
1✔
183
                    defaultString(otherAddress.getCountry()), defaultString(country)).append(
1✔
184
                    defaultString(otherAddress.getPostalCode()), defaultString(postalCode)).append(
1✔
185
                    defaultString(otherAddress.getLatitude()), defaultString(latitude)).append(
1✔
186
                    defaultString(otherAddress.getLongitude()), defaultString(longitude)).append(otherAddress.getStartDate(),
1✔
187
                    startDate).append(otherAddress.getEndDate(), endDate).isEquals();
1✔
188
        }
189
        
190
        /**
191
         * bitwise copy of the personAddress object. NOTICE: THIS WILL NOT COPY THE PATIENT OBJECT. The
192
         * PersonAddress.person object in this object AND the cloned object will point at the same
193
         * person
194
         *
195
         * @return New PersonAddress object
196
         */
197
        @Override
198
        public Object clone() {
199
                try {
200
                        return super.clone();
1✔
201
                }
202
                catch (CloneNotSupportedException e) {
×
UNCOV
203
                        throw new InternalError("PersonAddress should be cloneable");
×
204
                }
205
        }
206
        
207
        /**
208
         * @return Returns the address1.
209
         */
210
        @Override
211
        public String getAddress1() {
212
                return address1;
1✔
213
        }
214
        
215
        /**
216
         * @param address1 The address1 to set.
217
         */
218
        @Override
219
        public void setAddress1(String address1) {
220
                this.address1 = address1;
1✔
221
        }
1✔
222
        
223
        /**
224
         * @return Returns the address2.
225
         */
226
        @Override
227
        public String getAddress2() {
228
                return address2;
1✔
229
        }
230
        
231
        /**
232
         * @param address2 The address2 to set.
233
         */
234
        @Override
235
        public void setAddress2(String address2) {
236
                this.address2 = address2;
1✔
237
        }
1✔
238
        
239
        /**
240
         * @return Returns the cityVillage.
241
         */
242
        @Override
243
        public String getCityVillage() {
244
                return cityVillage;
1✔
245
        }
246
        
247
        /**
248
         * @param cityVillage The cityVillage to set.
249
         */
250
        @Override
251
        public void setCityVillage(String cityVillage) {
252
                this.cityVillage = cityVillage;
1✔
253
        }
1✔
254
        
255
        /**
256
         * @return Returns the country.
257
         */
258
        @Override
259
        public String getCountry() {
260
                return country;
1✔
261
        }
262
        
263
        /**
264
         * @param country The country to set.
265
         */
266
        @Override
267
        public void setCountry(String country) {
268
                this.country = country;
1✔
269
        }
1✔
270
        
271
        /**
272
         * @return Returns the preferred.
273
         * 
274
         * @deprecated as of 2.0, use {@link #getPreferred()}
275
         */
276
        @Deprecated
277
        @JsonIgnore
278
        public Boolean isPreferred() {
UNCOV
279
                return getPreferred();
×
280
        }
281
        
282
        public Boolean getPreferred() {
283
                return preferred == null ? Boolean.FALSE : preferred;
1✔
284
        }
285
        
286
        /**
287
         * @param preferred The preferred to set.
288
         */
289
        public void setPreferred(Boolean preferred) {
290
                this.preferred = preferred;
1✔
291
        }
1✔
292
        
293
        /**
294
         * @return Returns the latitude.
295
         */
296
        @Override
297
        public String getLatitude() {
298
                return latitude;
1✔
299
        }
300
        
301
        /**
302
         * @param latitude The latitude to set.
303
         */
304
        @Override
305
        public void setLatitude(String latitude) {
306
                this.latitude = latitude;
1✔
307
        }
1✔
308
        
309
        /**
310
         * @return Returns the longitude.
311
         */
312
        @Override
313
        public String getLongitude() {
314
                return longitude;
1✔
315
        }
316
        
317
        /**
318
         * @param longitude The longitude to set.
319
         */
320
        @Override
321
        public void setLongitude(String longitude) {
322
                this.longitude = longitude;
1✔
323
        }
1✔
324
        
325
        /**
326
         * @return Returns the person.
327
         */
328
        public Person getPerson() {
UNCOV
329
                return person;
×
330
        }
331
        
332
        /**
333
         * @param person The person to set.
334
         */
335
        public void setPerson(Person person) {
336
                this.person = person;
1✔
337
        }
1✔
338
        
339
        /**
340
         * @return Returns the personAddressId.
341
         */
342
        public Integer getPersonAddressId() {
343
                return personAddressId;
1✔
344
        }
345
        
346
        /**
347
         * @param personAddressId The personAddressId to set.
348
         */
349
        public void setPersonAddressId(Integer personAddressId) {
350
                this.personAddressId = personAddressId;
1✔
351
        }
1✔
352
        
353
        /**
354
         * @return Returns the postalCode.
355
         */
356
        @Override
357
        public String getPostalCode() {
358
                return postalCode;
1✔
359
        }
360
        
361
        /**
362
         * @param postalCode The postalCode to set.
363
         */
364
        @Override
365
        public void setPostalCode(String postalCode) {
366
                this.postalCode = postalCode;
1✔
367
        }
1✔
368
        
369
        /**
370
         * @return Returns the stateProvince.
371
         */
372
        @Override
373
        public String getStateProvince() {
374
                return stateProvince;
1✔
375
        }
376
        
377
        /**
378
         * @param stateProvince The stateProvince to set.
379
         */
380
        @Override
381
        public void setStateProvince(String stateProvince) {
382
                this.stateProvince = stateProvince;
1✔
383
        }
1✔
384
        
385
        /**
386
         * @return Returns the countyDistrict.
387
         */
388
        @Override
389
        public String getCountyDistrict() {
390
                return countyDistrict;
1✔
391
        }
392
        
393
        /**
394
         * @param countyDistrict The countyDistrict to set.
395
         */
396
        @Override
397
        public void setCountyDistrict(String countyDistrict) {
398
                this.countyDistrict = countyDistrict;
1✔
399
        }
1✔
400
        
401
        /**
402
         * Convenience method to test whether any of the fields in this address are set
403
         *
404
         * @return whether any of the address fields (address1, address2, cityVillage, stateProvince,
405
         *         country, countyDistrict, neighborhoodCell, postalCode, latitude, longitude, etc) are
406
         *         whitespace, empty ("") or null.
407
         */
408
        public boolean isBlank() {
409
                
410
                return StringUtils.isBlank(getAddress1()) && StringUtils.isBlank(getAddress2())
1✔
411
                        && StringUtils.isBlank(getAddress3()) && StringUtils.isBlank(getAddress4())
1✔
412
                        && StringUtils.isBlank(getAddress5()) && StringUtils.isBlank(getAddress6())
1✔
413
                        && StringUtils.isBlank(getCityVillage()) && StringUtils.isBlank(getStateProvince())
1✔
414
                        && StringUtils.isBlank(getCountry()) && StringUtils.isBlank(getCountyDistrict())
1✔
415
                        && StringUtils.isBlank(getPostalCode()) && StringUtils.isBlank(getLatitude())
1✔
416
                        && StringUtils.isBlank(getLongitude());
1✔
417
                
418
        }
419
                        
420
        /**
421
         * @see java.lang.Comparable#compareTo(java.lang.Object)
422
         * Note: this comparator imposes orderings that are inconsistent with equals.
423
         */
424
        @Override
425
        @SuppressWarnings("squid:S1210")
426
        public int compareTo(PersonAddress other) {
427
                int retValue = 0;
1✔
428
                if (other != null) {
1✔
429
                        retValue = getVoided().compareTo(other.getVoided());
1✔
430
                        if (retValue == 0) {
1✔
431
                                retValue = other.getPreferred().compareTo(getPreferred());
1✔
432
                        }
433
                        if (retValue == 0 && getDateCreated() != null) {
1✔
434
                                retValue = OpenmrsUtil.compareWithNullAsLatest(getDateCreated(), other.getDateCreated());
1✔
435
                        }
436
                        if (retValue == 0) {
1✔
437
                                retValue = OpenmrsUtil.compareWithNullAsGreatest(getPersonAddressId(), other.getPersonAddressId());
1✔
438
                        }
439
                        
440
                        // if we've gotten this far, just check all address values. If they are
441
                        // equal, leave the objects at 0. If not, arbitrarily pick retValue=1
442
                        // and return that (they are not equal).
443
                        if (retValue == 0 && !equalsContent(other)) {
1✔
444
                                retValue = 1;
1✔
445
                        }
446
                }
447
                return retValue;
1✔
448
        }
449
        
450
        /**
451
         * @since 1.8
452
         * @return the address3
453
         */
454
        @Override
455
        public String getAddress3() {
456
                return address3;
1✔
457
        }
458
        
459
        /**
460
         * @since 1.8
461
         * @param address3 the address3 to set
462
         */
463
        @Override
464
        public void setAddress3(String address3) {
465
                this.address3 = address3;
1✔
466
        }
1✔
467
        
468
        /**
469
         * @since 1.8
470
         * @return the address4
471
         */
472
        @Override
473
        public String getAddress4() {
474
                return address4;
1✔
475
        }
476
        
477
        /**
478
         * @since 1.8
479
         * @param address4 the address4 to set
480
         */
481
        @Override
482
        public void setAddress4(String address4) {
483
                this.address4 = address4;
1✔
484
        }
1✔
485
        
486
        /**
487
         * @since 1.8
488
         * @return the address6
489
         */
490
        @Override
491
        public String getAddress6() {
492
                return address6;
1✔
493
        }
494
        
495
        /**
496
         * @since 1.8
497
         * @param address6 the address6 to set
498
         */
499
        @Override
500
        public void setAddress6(String address6) {
501
                this.address6 = address6;
1✔
502
        }
1✔
503
        
504
        /**
505
         * @since 1.8
506
         * @return the address5
507
         */
508
        @Override
509
        public String getAddress5() {
510
                return address5;
1✔
511
        }
512
        
513
        /**
514
         * @since 1.8
515
         * @param address5 the address5 to set
516
         */
517
        @Override
518
        public void setAddress5(String address5) {
519
                this.address5 = address5;
1✔
520
        }
1✔
521
        
522
        /**
523
         * @since 1.5
524
         * @see org.openmrs.OpenmrsObject#getId()
525
         */
526
        @Override
527
        public Integer getId() {
528
                
UNCOV
529
                return getPersonAddressId();
×
530
        }
531
        
532
        /**
533
         * @since 1.5
534
         * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
535
         */
536
        @Override
537
        public void setId(Integer id) {
UNCOV
538
                setPersonAddressId(id);
×
539
                
UNCOV
540
        }
×
541
        
542
        /**
543
         * @return the startDate
544
         * @since 1.9
545
         */
546
        public Date getStartDate() {
547
                return startDate;
1✔
548
        }
549
        
550
        /**
551
         * @param startDate to set to
552
         * @since 1.9
553
         */
554
        public void setStartDate(Date startDate) {
555
                this.startDate = startDate;
1✔
556
        }
1✔
557
        
558
        /**
559
         * @return the endDate
560
         * @since 1.9
561
         */
562
        public Date getEndDate() {
563
                return this.endDate;
1✔
564
        }
565
        
566
        /**
567
         * @param endDate to set to
568
         * @since 1.9
569
         */
570
        public void setEndDate(Date endDate) {
571
                this.endDate = endDate;
1✔
572
        }
1✔
573
        
574
        /**
575
         * Returns true if the address' endDate is null
576
         *
577
         * @return true or false
578
         * @since 1.9
579
         */
580
        public Boolean isActive() {
UNCOV
581
                return this.endDate == null;
×
582
        }
583
        
584
        /**
585
         * Makes an address inactive by setting its endDate to the current time
586
         *
587
         * @since 1.9
588
         */
589
        public void deactivate() {
590
                setEndDate(Calendar.getInstance().getTime());
×
UNCOV
591
        }
×
592
        
593
        /**
594
         * Makes an address active by setting its endDate to null
595
         *
596
         * @since 1.9
597
         */
598
        public void activate() {
599
                setEndDate(null);
×
UNCOV
600
        }
×
601
        
602
        /**
603
         * {@inheritDoc}
604
         */
605
        @Override
606
        public String getAddress7() {
607
                return address7;
1✔
608
        }
609

610
        /**
611
         * {@inheritDoc}
612
         */
613
        @Override
614
        public void setAddress7(String address7) {
615
                this.address7 = address7;
1✔
616
        }
1✔
617

618
        /**
619
         * {@inheritDoc}
620
         */
621
        @Override
622
        public String getAddress8() {
623
                return address8;
1✔
624
        }
625

626
        /**
627
         * {@inheritDoc}
628
         */
629
        @Override
630
        public void setAddress8(String address8) {
631
                this.address8 = address8;
1✔
632
        }
1✔
633

634
        /**
635
         * {@inheritDoc}
636
         */
637
        @Override
638
        public String getAddress9() {
639
                return address9;
1✔
640
        }
641

642
        /**
643
         * {@inheritDoc}
644
         */
645
        @Override
646
        public void setAddress9(String address9) {
647
                this.address9 = address9;
1✔
648
        }
1✔
649

650
        /**
651
         * {@inheritDoc}
652
         */
653
        @Override
654
        public String getAddress10() {
655
                return address10;
1✔
656
        }
657

658
        /**
659
         * {@inheritDoc}
660
         */
661
        @Override
662
        public void setAddress10(String address10) {
663
                this.address10 = address10;
1✔
664
        }
1✔
665

666
        /**
667
         * {@inheritDoc}
668
         */
669
        @Override
670
        public String getAddress11() {
671
                return address11;
1✔
672
        }
673

674
        /**
675
         * {@inheritDoc}
676
         */
677
        @Override
678
        public void setAddress11(String address11) {
679
                this.address11 = address11;
1✔
680
        }
1✔
681

682
        /**
683
         * {@inheritDoc}
684
         */
685
        @Override
686
        public String getAddress12() {
687
                return address12;
1✔
688
        }
689

690
        /**
691
         * {@inheritDoc}
692
         */
693
        @Override
694
        public void setAddress12(String address12) {
695
                this.address12 = address12;
1✔
696
        }
1✔
697

698
        /**
699
         * {@inheritDoc}
700
         */
701
        @Override
702
        public String getAddress13() {
703
                return address13;
1✔
704
        }
705

706
        /**
707
         * {@inheritDoc}
708
         */
709
        @Override
710
        public void setAddress13(String address13) {
711
                this.address13 = address13;
1✔
712
        }
1✔
713

714
        /**
715
         * {@inheritDoc}
716
         */
717
        @Override
718
        public String getAddress14() {
719
                return address14;
1✔
720
        }
721

722
        /**
723
         * {@inheritDoc}
724
         */
725
        @Override
726
        public void setAddress14(String address14) {
727
                this.address14 = address14;
1✔
728
        }
1✔
729

730
        /**
731
         * {@inheritDoc}
732
         */
733
        @Override
734
        public String getAddress15() {
735
                return address15;
1✔
736
        }
737

738
        /**
739
         * {@inheritDoc}
740
         */
741
        @Override
742
        public void setAddress15(String address15) {
743
                this.address15 = address15;
1✔
744
        }
1✔
745
}
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