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

openmrs / openmrs-core / 15205088843

23 May 2025 07:43AM UTC coverage: 65.083% (+0.01%) from 65.069%
15205088843

push

github

rkorytkowski
TRUNK-6300: Adding Windows test, cleaning up logs, adjusting variable name

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

336 existing lines in 18 files now uncovered.

23379 of 35922 relevant lines covered (65.08%)

0.65 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.GeneratedValue;
24
import javax.persistence.GenerationType;
25
import javax.persistence.Id;
26
import javax.persistence.JoinColumn;
27
import javax.persistence.ManyToOne;
28
import javax.persistence.Table;
29
import java.util.Calendar;
30
import java.util.Date;
31

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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