/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs; import java.util.Date; import org.codehaus.jackson.annotate.JsonIgnore; import org.openmrs.customdatatype.CustomDatatype; import org.openmrs.customdatatype.CustomDatatypeUtil; import org.openmrs.customdatatype.CustomValueDescriptor; import org.openmrs.customdatatype.InvalidCustomValueException; import org.openmrs.customdatatype.SingleCustomValue; /** * Global properties are simple key-value pairs persisted in the database GPs can be thought of as * something similar to environment variables used in operating systems. */ public class GlobalProperty extends BaseOpenmrsObject implements CustomValueDescriptor, SingleCustomValue<GlobalProperty> { private String property = ""; private String propertyValue = ""; private transient Object typedValue; // if true, indicates that setValue has been called, and we need to invoke CustomDatatype's save private boolean dirty = false; private String description = ""; private String datatypeClassname; private String datatypeConfig; private String preferredHandlerClassname; private String handlerConfig; private User changedBy; private Date dateChanged; /** * Default empty constructor */ public GlobalProperty() { } /** * Constructor defining the key for this GP * * @param property key to name the property */ public GlobalProperty(String property) { this.property = property; } /** * Constructor defining the key and value of this GP * * @param property key to name the property * @param value value to give to the property */ public GlobalProperty(String property, String value) { this(property); this.propertyValue = value; } /** * Constructor defining key/value/description for this GP * * @param property key to name the property * @param value value to give to the property * @param description description of how this property is used */ public GlobalProperty(String property, String value, String description) { this(property, value); this.description = description; } /** * Constructor defining key/value/description/customDatatype/datatypeConfig * * @param property * @param value * @param description * @param datatypeClass * @param datatypeConfig * * @since 1.9 */ public GlobalProperty(String property, String value, String description, Class<? extends CustomDatatype<?>> datatypeClass, String datatypeConfig) { this(property, value, description); this.datatypeClassname = datatypeClass.getName(); this.datatypeConfig = datatypeConfig; } /** * @return Returns the property. */ public String getProperty() { return property; } /** * @param property The property to set. */ public void setProperty(String property) { this.property = property; } /** * @return Returns the propertyValue. */ public String getPropertyValue() { return propertyValue; } /** * @param propertyValue The propertyValue to set. */ public void setPropertyValue(String propertyValue) { this.propertyValue = propertyValue; } /** * @return the description */ public String getDescription() { return description; } /** * @param description the description to set */ public void setDescription(String description) { this.description = description; } /** * @since 1.5 * @see org.openmrs.OpenmrsObject#getId() */ @Override public Integer getId() { throw new UnsupportedOperationException(); } /** * @since 1.5 * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer) */ @Override public void setId(Integer id) { throw new UnsupportedOperationException(); } /** * @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeClassname() * @since 1.9 */ @Override public String getDatatypeClassname() { return datatypeClassname; } /** * @param datatypeClassname the datatypeClassname to set * @since 1.9 */ public void setDatatypeClassname(String datatypeClassname) { this.datatypeClassname = datatypeClassname; } /** * @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeConfig() * @since 1.9 */ @Override public String getDatatypeConfig() { return datatypeConfig; } /** * @param datatypeConfig the datatypeConfig to set * @since 1.9 */ public void setDatatypeConfig(String datatypeConfig) { this.datatypeConfig = datatypeConfig; } /** * @see org.openmrs.customdatatype.CustomValueDescriptor#getPreferredHandlerClassname() * @since 1.9 */ @Override public String getPreferredHandlerClassname() { return preferredHandlerClassname; } /** * @param preferredHandlerClassname the preferredHandlerClassname to set * @since 1.9 */ public void setPreferredHandlerClassname(String preferredHandlerClassname) { this.preferredHandlerClassname = preferredHandlerClassname; } /** * @see org.openmrs.customdatatype.CustomValueDescriptor#getHandlerConfig() * @since 1.9 */ @Override public String getHandlerConfig() { return handlerConfig; } /** * @param handlerConfig the handlerConfig to set * @since 1.9 */ public void setHandlerConfig(String handlerConfig) { this.handlerConfig = handlerConfig; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "property: " + getProperty() + " value: " + getPropertyValue(); } /** * @see org.openmrs.customdatatype.SingleCustomValue#getDescriptor() * * @since 1.9 */ @Override public GlobalProperty getDescriptor() { return this; } /** * @see org.openmrs.customdatatype.SingleCustomValue#getValueReference() * * @since 1.9 */ @Override public String getValueReference() { return getPropertyValue(); } /** * @see org.openmrs.customdatatype.SingleCustomValue#setValueReferenceInternal(java.lang.String) * * @since 1.9 */ @Override public void setValueReferenceInternal(String valueToPersist) throws InvalidCustomValueException { setPropertyValue(valueToPersist); } /** * @see org.openmrs.customdatatype.SingleCustomValue#getValue() * * @since 1.9 */ @Override public Object getValue() throws InvalidCustomValueException { if (typedValue == null) { typedValue = CustomDatatypeUtil.getDatatypeOrDefault(this).fromReferenceString(getValueReference()); } return typedValue; } /** * @see org.openmrs.customdatatype.SingleCustomValue#setValue(java.lang.Object) * * @since 1.9 */ @Override public <T> void setValue(T typedValue) throws InvalidCustomValueException { this.typedValue = typedValue; dirty = true; } /** * @see org.openmrs.customdatatype.SingleCustomValue#isDirty() * * @deprecated as of 2.0, use {@link #getDirty()} */ @Deprecated @JsonIgnore @Override public boolean isDirty() { return getDirty(); } public boolean getDirty() { return dirty; } /** * @return Returns the changedBy. */ public User getChangedBy() { return changedBy; } /** * @param changedBy The user that changed this object */ public void setChangedBy(User changedBy) { this.changedBy = changedBy; } /** * @return Returns the date this object was changed */ public Date getDateChanged() { return dateChanged; } /** * @param dateChanged The date this object was changed */ public void setDateChanged(Date dateChanged) { this.dateChanged = dateChanged; } }