/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.report;
import java.io.StringWriter;
import org.openmrs.BaseOpenmrsObject;
import org.openmrs.util.OpenmrsUtil;
import org.simpleframework.xml.Serializer;
/**
* This represents a very simplified saving technique for ReportSchemas. The "xml" attribute is
* assumed to be a serialized ReportSchema object.
*
* @deprecated see reportingcompatibility module
*/
@Deprecated
public class ReportSchemaXml extends BaseOpenmrsObject {
private static final long serialVersionUID = 9330457450L;
private Integer reportSchemaId;
private String name;
private String description;
private String xml;
/**
* Default constructor
*/
public ReportSchemaXml() {
}
/**
* Convenience constructor taking in a primary key report schema id
*
* @param reportschemaId
*/
public ReportSchemaXml(Integer reportschemaId) {
this.reportSchemaId = reportschemaId;
}
/**
* Convenience constructor to allow a user to create this shlub of a class from a full
* ReportSchema object
*
* @param schema the ReportSchema to serialize and store with this tiny class
* @throws Exception if serialization fails
*/
public ReportSchemaXml(ReportSchema schema) throws Exception {
Serializer serializer = OpenmrsUtil.getSerializer();
StringWriter writer = new StringWriter();
serializer.write(schema, writer);
populateFromReportSchema(schema);
setXml(writer.toString());
}
/**
* Set the Report Schema Id
*
* @param reportSchemaId
*/
public void setReportSchemaId(Integer reportSchemaId) {
this.reportSchemaId = reportSchemaId;
}
/**
* Returns the ReportSchema Id
*
* @return the Integer Report Schema Id
*/
public Integer getReportSchemaId() {
return this.reportSchemaId;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}
/**
* Set the xml content for the ReportSchemaXml
*
* @param xml serialized content
*/
public void setXml(String xml) {
this.xml = xml;
}
/**
* Returns the xml of the ReportSchemaXml
*
* @return current xml serialization
*/
public String getXml() {
return this.xml;
}
/**
* Convenience helper method to set the attributes on this ReportSchemaXML object with what is
* in the report schema object
*
* @param reportSchema ReportSchema from which to pull values
*/
public void populateFromReportSchema(ReportSchema reportSchema) {
setReportSchemaId(reportSchema.getReportSchemaId());
setName(reportSchema.getName());
setDescription(reportSchema.getDescription());
}
/**
* Convenience helper method that will deserialize the "xml" string to a ReportSchema, update
* that report schema with the id/name/desc attributes that are on this ReportSchemaXml object,
* and then re serialize that ReportSchema object into the "xml" string
*/
public void updateXmlFromAttributes() throws Exception {
if (getXml() != null && getReportSchemaId() != null) {
String newXml;
if (xml.contains("reportSchemaId="))
newXml = xml.replaceFirst("reportSchemaId=[\"'][^ ]*[\"']", "reportSchemaId=\"" + reportSchemaId + "\"");
else
newXml = xml
.replaceFirst("<reportSchema([ >])", "<reportSchema reportSchemaId=\"" + reportSchemaId + "\"$1");
setXml(newXml);
}
}
/**
* @since 1.5
* @see org.openmrs.OpenmrsObject#getId()
*/
public Integer getId() {
return getReportSchemaId();
}
/**
* @since 1.5
* @see org.openmrs.OpenmrsObject#setId(java.lang.Integer)
*/
public void setId(Integer id) {
setReportSchemaId(id);
}
}