RowPerObsColumn.java

/**
 * 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.reporting.export;

import java.io.Serializable;

/**
 * Used with the RowPerObsDataExport to output data for one concept answered multiple times per
 * patient. The output will repeat patients in rows in order to list off all observations for the
 * given concept Example output:
 * 
 * <pre>
 * PatientId, Obs Value, Obs Date
 * 123,       55.3,      1/1/2000
 * 123,       60.3,      2/5/2000
 * 123,       62.0,      3/3/2000
 * 4393,      34.0,      1/2/2000
 * 4393,      35.0,      1/7/2000
 * 4400,      12.0,      1/1/2000
 * </pre>
 * 
 * @deprecated see reportingcompatibility module
 */
@Deprecated
public class RowPerObsColumn implements ExportColumn, Serializable {
	
	public static final long serialVersionUID = 987654323L;
	
	private String columnType = "rowPerObs";
	
	private String columnName = "";
	
	private Integer conceptId = null;
	
	private String conceptName = "";
	
	private String[] extras = null;
	
	public RowPerObsColumn() {
	}
	
	/**
	 * Convenience constructor to build the column with all values at once
	 * 
	 * @param columnName
	 * @param conceptId
	 * @param extras
	 */
	public RowPerObsColumn(String columnName, String conceptId, String[] extras) {
		this.columnName = columnName;
		try {
			this.conceptId = Integer.valueOf(conceptId);
		}
		catch (NumberFormatException e) {
			this.conceptName = conceptId; // for backwards compatibility to pre 1.0.43
		}
		this.extras = extras;
	}
	
	/**
	 * @see org.openmrs.reporting.export.ExportColumn#toTemplateString()
	 */
	public String toTemplateString() {
		String s = "#foreach($val in $vals)";
		s += "#if($velocityCount > 1)";
		s += "$!{fn.getSeparator()}";
		s += "#end";
		s += "$!{fn.getValueAsString($val)}";
		s += "#end";
		
		return s;
	}
	
	public String getColumnType() {
		return columnType;
	}
	
	public void setColumnType(String columnType) {
		this.columnType = columnType;
	}
	
	public String getColumnName() {
		return columnName;
	}
	
	public String getTemplateColumnName() {
		String s = columnName;
		s += getExtrasTemplateColumnNames(false);
		
		return s;
	}
	
	private String getExtrasTemplateColumnNames(boolean appendCount) {
		String s = "";
		if (extras != null) {
			for (String ext : extras) {
				s += "$!{fn.getSeparator()}";
				s += columnName + "_" + ext;
				if (appendCount)
					s += "_($velocityCount)";
			}
		}
		return s;
	}
	
	//// left for backwards compatibility to pre 1.0.43
	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}
	
	public String getConceptName() {
		return conceptName;
	}
	
	///////
	
	public Integer getConceptId() {
		return conceptId;
	}
	
	public void setConceptId(Integer conceptId) {
		this.conceptId = conceptId;
	}
	
	public void setConceptName(String conceptName) {
		this.conceptName = conceptName;
	}
	
	public String[] getExtras() {
		return extras;
	}
	
	public void setExtras(String[] extras) {
		this.extras = extras;
	}
	
	// returns conceptId if not null, conceptName otherwise
	// convenience method for backwards compatibility to pre 1.0.43
	public String getConceptIdOrName() {
		if (conceptId != null)
			return conceptId.toString();
		else
			return conceptName;
	}
	
}