/**
* 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.CustomDatatypeUtil;
import org.openmrs.customdatatype.CustomValueDescriptor;
import org.openmrs.customdatatype.InvalidCustomValueException;
import org.openmrs.customdatatype.NotYetPersistedException;
import org.openmrs.customdatatype.SingleCustomValue;
/**
* A FormResource is meant as a way for modules to add arbitrary information to
* a Form. FormResources are essentially just key-value pairs. The value is
* stored as a custom datatype. A Form can have 0-n FormResources but only one
* FormResource per name per Form.
*
* The <i>name</i> of a resource specifies one of many resources that can be
* stored for a particular owner. Only one resource for each name will
* ever be saved.
*
* @since 1.9
*/
public class FormResource extends BaseOpenmrsObject implements CustomValueDescriptor, SingleCustomValue<FormResource> {
private Integer formResourceId;
private Form form;
private String name;
private String valueReference;
private String datatypeClassname;
private String datatypeConfig;
private String preferredHandlerClassname;
private String handlerConfig;
private transient boolean dirty = false;
private transient Object typedValue;
private User changedBy;
private Date dateChanged;
public FormResource() {
// generic constructor
}
/**
* Create a copy of a provided FormResource, ignoring the uuid and id of the original
*
* @param old the original FormResource to be copied
*/
public FormResource(FormResource old) {
this.form = old.getForm();
this.name = old.getName();
this.valueReference = old.getValueReference();
this.datatypeClassname = old.getDatatypeClassname();
this.datatypeConfig = old.getDatatypeConfig();
this.preferredHandlerClassname = old.getPreferredHandlerClassname();
this.handlerConfig = old.getHandlerConfig();
}
/**
* @see org.openmrs.OpenmrsObject#getId()
*/
@Override
public Integer getId() {
return getFormResourceId();
}
/**
* @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
*/
@Override
public void setId(Integer id) {
setFormResourceId(id);
}
/**
* gets the form
*
* @return the form
*/
public Form getForm() {
return form;
}
/**
* sets the form
*
* @param form the form
*/
public void setForm(Form form) {
this.form = form;
}
/**
* gets the form resource id
*
* @return the form resource's id
*/
public Integer getFormResourceId() {
return formResourceId;
}
/**
* sets the form resource id
*
* @param formResourceId the form resource's id
*/
public void setFormResourceId(Integer formResourceId) {
this.formResourceId = formResourceId;
}
/**
* gets the name of the resource
*
* @return the name of the resource
*/
public String getName() {
return name;
}
/**
* sets the name of the resource
*
* @param name the name of the resource
*/
public void setName(String name) {
this.name = name;
}
/**
* @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeClassname()
*/
@Override
public String getDatatypeClassname() {
return datatypeClassname;
}
/**
* @param datatypeClassname the datatypeClassname to set
*/
public void setDatatypeClassname(String datatypeClassname) {
this.datatypeClassname = datatypeClassname;
}
/**
* @see org.openmrs.customdatatype.CustomValueDescriptor#getDatatypeConfig()
*/
@Override
public String getDatatypeConfig() {
return datatypeConfig;
}
/**
* @param datatypeConfig the datatypeConfig to set
*/
public void setDatatypeConfig(String datatypeConfig) {
this.datatypeConfig = datatypeConfig;
}
/**
* @see org.openmrs.customdatatype.CustomValueDescriptor#getPreferredHandlerClassname()
*/
@Override
public String getPreferredHandlerClassname() {
return preferredHandlerClassname;
}
/**
* @param preferredHandlerClassname the preferredHandlerClassname to set
*/
public void setPreferredHandlerClassname(String preferredHandlerClassname) {
this.preferredHandlerClassname = preferredHandlerClassname;
}
/**
* @see org.openmrs.customdatatype.CustomValueDescriptor#getHandlerConfig()
*/
@Override
public String getHandlerConfig() {
return handlerConfig;
}
/**
* @param handlerConfig the handlerConfig to set
*/
public void setHandlerConfig(String handlerConfig) {
this.handlerConfig = handlerConfig;
}
/**
* @see org.openmrs.customdatatype.SingleCustomValue#getDescriptor()
*/
@Override
public FormResource getDescriptor() {
return this;
}
/**
* @see org.openmrs.customdatatype.SingleCustomValue#getValueReference()
*/
@Override
public String getValueReference() {
if (valueReference == null) {
throw new NotYetPersistedException();
} else {
return valueReference;
}
}
/**
* @see org.openmrs.customdatatype.SingleCustomValue#getValue()
*/
@Override
public Object getValue() throws InvalidCustomValueException {
if (typedValue == null) {
typedValue = CustomDatatypeUtil.getDatatype(this).fromReferenceString(getValueReference());
}
return typedValue;
}
/**
* @see org.openmrs.customdatatype.SingleCustomValue#setValue(java.lang.Object)
*/
@Override
public <T> void setValue(T typedValue) throws InvalidCustomValueException {
this.typedValue = typedValue;
dirty = true;
}
/**
* @see org.openmrs.customdatatype.SingleCustomValue#setValueReferenceInternal(java.lang.String)
*/
@Override
public void setValueReferenceInternal(String valueToPersist) throws InvalidCustomValueException {
this.valueReference = valueToPersist;
}
/**
* @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;
}
}