diff --git a/api/src/main/java/org/openmrs/BaseCustomizableData.java b/api/src/main/java/org/openmrs/BaseCustomizableData.java index 732615c5f..b584f5d95 100644 --- a/api/src/main/java/org/openmrs/BaseCustomizableData.java +++ b/api/src/main/java/org/openmrs/BaseCustomizableData.java @@ -14,6 +14,7 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.TreeSet; import org.openmrs.attribute.Attribute; import org.openmrs.customdatatype.CustomValueDescriptor; @@ -26,7 +27,7 @@ import org.openmrs.customdatatype.Customizable; */ public abstract class BaseCustomizableData extends BaseChangeableOpenmrsData implements Customizable { - private Set attributes = new LinkedHashSet<>(); + private Set attributes = new TreeSet<>(); /** * @see org.openmrs.customdatatype.Customizable#getAttributes() diff --git a/api/src/main/java/org/openmrs/Person.java b/api/src/main/java/org/openmrs/Person.java index 948e3480f..1024f69d8 100644 --- a/api/src/main/java/org/openmrs/Person.java +++ b/api/src/main/java/org/openmrs/Person.java @@ -53,11 +53,6 @@ public class Person extends BaseCustomizableData { @ContainedIn private Set names = null; - @Override - public Set getAttributes() { - return super.getAttributes(); - } - @Field private String gender; @@ -395,18 +390,11 @@ public class Person extends BaseCustomizableData { public void setNames(Set names) { this.names = names; } - - /** - * @return all known attributes for person - * @see org.openmrs.PersonAttribute - * Should not get voided attributes - * Should not fail with null attributes - */ + + @ContainedIn + @Override public Set getAttributes() { - if (attributes == null) { - attributes = new TreeSet<>(); - } - return this.attributes; + return super.getAttributes(); } /** @@ -414,7 +402,7 @@ public class Person extends BaseCustomizableData { * @see org.openmrs.PersonAttribute */ public void setAttributes(Set attributes) { - this.attributes = attributes; + super.setAttributes(attributes); attributeMap = null; allAttributeMap = null; } @@ -465,8 +453,10 @@ public class Person extends BaseCustomizableData { } } } + attributeMap = null; allAttributeMap = null; + Set attributes = getAttributes(); if (!OpenmrsUtil.collectionContains(attributes, newAttribute) && !newIsNull) { attributes.add(newAttribute); } @@ -482,6 +472,7 @@ public class Person extends BaseCustomizableData { * Should remove attribute when exist */ public void removeAttribute(PersonAttribute attribute) { + Set attributes = getAttributes(); if (attributes != null && attributes.remove(attribute)) { attributeMap = null; allAttributeMap = null; diff --git a/api/src/main/java/org/openmrs/VisitAttribute.java b/api/src/main/java/org/openmrs/VisitAttribute.java index cd75bd2b7..3602f07c3 100644 --- a/api/src/main/java/org/openmrs/VisitAttribute.java +++ b/api/src/main/java/org/openmrs/VisitAttribute.java @@ -17,7 +17,7 @@ import org.openmrs.attribute.BaseAttribute; * @see Attribute * @since 1.9 */ -public class VisitAttribute extends BaseAttribute implements Attribute { +public class VisitAttribute extends BaseAttribute { private Integer visitAttributeId; diff --git a/api/src/main/java/org/openmrs/attribute/Attribute.java b/api/src/main/java/org/openmrs/attribute/Attribute.java index 472797444..edc106ab8 100644 --- a/api/src/main/java/org/openmrs/attribute/Attribute.java +++ b/api/src/main/java/org/openmrs/attribute/Attribute.java @@ -27,7 +27,7 @@ import org.openmrs.customdatatype.SingleCustomValue; * @see Customizable * @since 1.9 */ -public interface Attribute> extends OpenmrsData, SingleCustomValue { +public interface Attribute> extends OpenmrsData, SingleCustomValue, Comparable { /** * @return the owner that this attribute belongs to