package com.calipso.reportgenerator.common;
import com.calipso.reportgenerator.reportcalculator.SharedInteger;
import com.calipso.reportgenerator.reportcalculator.SharedDate;
import com.calipso.reportgenerator.reportcalculator.SharedString;
import com.calipso.reportgenerator.reportcalculator.SharedFloat;
import com.calipso.reportgenerator.reportdefinitions.types.ReportDataType;
import com.calipso.reportgenerator.reportdefinitions.ViewParameterValues;
import com.calipso.reportgenerator.reportdefinitions.ViewParameterValue;
import com.calipso.common.DateEx;
import java.util.Map;
import java.util.Iterator;
import java.util.Date;
import java.util.HashMap;
import java.text.SimpleDateFormat;
/**
*
* User: Breto
* Date: 20-abr-2004
* Time: 15:03:57
*/
public class ReportMap {
public static Map setParametersToSimpleType(Map params){
return doSetParametersToType(params, false);
}
public static Object getSimpleTypeValue(Object value) {
if(value!=null){
Object newValue;
if(value.getClass()==SharedInteger.class){
newValue = ((SharedInteger)value).getValue();
} else if(value.getClass()==SharedDate.class){
newValue = ((SharedDate)value).getValue();
newValue = ((DateEx)newValue).getDate();
} else if(value.getClass()==SharedString.class){
newValue = ((SharedString)value).getValue();
} else if(value.getClass()==SharedFloat.class){
newValue = ((SharedFloat)value).getValue();
} else if(value.getClass()==DateEx.class){
newValue = ((DateEx)value).getDate();
} else {
newValue = value;
}
return newValue;
}
return null;
}
public static Class getJavaLangType(ReportDataType dataType) {
switch(dataType.getType()){
case ReportDataType.DATE_TYPE:
case ReportDataType.DATETIME_TYPE:
return Date.class;
case ReportDataType.STRING_TYPE:
return String.class;
case ReportDataType.BOOLEAN_TYPE:
return Boolean.class;
case ReportDataType.FLOAT_TYPE:
return Float.class;
case ReportDataType.INTEGER_TYPE:
return Integer.class;
default:
return String.class;
}
}
/**
* Mecanismo inverso a setParametersToSimpleType. Los parametros pasados por parametro ya deben estar en el tipo
* correcto de Java (no se puede pasar un String y pretender que reconozca una fecha).
* @param params
* @return parametros en tipo "Shared..."
*/
public static Map setParametersToReportManagerType(Map params) {
return doSetParametersToType(params, true);
}
private static Map doSetParametersToType(Map params, boolean complex) {
Iterator iterator = params.entrySet().iterator();
Object value;
Object newValue;
while(iterator.hasNext()){
Map.Entry current = (Map.Entry)iterator.next();
value = current.getValue();
if(complex){
newValue = ReportMap.getComlexTypeValue(value);
}else{
newValue = ReportMap.getSimpleTypeValue(value);
}
current.setValue(newValue);
}
return params;
}
private static Object getComlexTypeValue(Object value) {
Object newValue;
if(value instanceof Integer){
newValue = SharedInteger.newFrom((Integer)value);
} else if(value instanceof Date){
DateEx ex = new DateEx((Date)value);
newValue = SharedDate.newFrom(ex);
} else if(value instanceof String){
newValue = ((String)value).intern();//SharedString.newFrom((String)value);
} else if(value instanceof Float){
newValue = SharedFloat.newFrom((Float)value);
} else {
newValue = value;
}
return newValue;
}
}
|