1 package com.calipso.reportgenerator.common; 2 3 import com.calipso.reportgenerator.reportcalculator.ExpressionCubeFilter; 4 import com.calipso.reportgenerator.reportcalculator.SharedDate; 5 import com.calipso.reportgenerator.reportcalculator.SharedInteger; 6 import com.calipso.reportgenerator.reportcalculator.SharedFloat; 7 import com.calipso.reportgenerator.reportcalculator.expression.Expression; 8 import com.calipso.reportgenerator.reportdefinitions.ParameterValues; 9 import com.calipso.reportgenerator.reportdefinitions.ParameterValue; 10 import com.calipso.reportgenerator.reportdefinitions.types.ReportDataType; 11 import com.calipso.reportgenerator.common.ReportSpec; 12 import com.calipso.reportgenerator.common.ReportFilter; 13 import com.calipso.common.DateEx; 14 15 import java.util.*; 16 import java.text.DateFormat ; 17 import java.text.SimpleDateFormat ; 18 19 30 public class ReportFilterBuilder { 31 32 private List reportFilters; 33 private Map paramValues; 34 private int mode; 35 public static final int VARMODE_INDEX = 0; 36 public static final int VARMODE_DATAINDEX = 1; 37 public static final int VARMODE_NAME = 2; 38 public static final int VARMODE_EXTERNALDATA = 3; 39 40 46 public ReportFilterBuilder(List reportFilters, Map paramValues, int mode) { 47 this.paramValues = paramValues; 48 this.reportFilters = reportFilters; 49 this.mode = mode; 50 } 51 52 56 public ExpressionCubeFilter getCubeFilter(ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec) throws InfoException{ 57 Expression exp = null; 58 ExpressionCubeFilter cubeFilter = null; 59 for (Iterator iterator = reportFilters.iterator(); iterator.hasNext();) { 60 ReportFilter reportFilter = (ReportFilter) iterator.next(); 61 String dimensionName = reportFilter.getFilterSpec().getDimensionName(); 62 if(dimensionName!=null && !dimensionName.equalsIgnoreCase("")){ 63 Expression currentExp = reportFilter.getExpression(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 64 if (currentExp != null) { 65 if (exp == null) { 66 exp = currentExp; 67 } 68 else { 69 exp = exp.newAnd(currentExp); 70 } 71 } 72 } 73 } 74 if (exp==null){ } 77 cubeFilter = new ExpressionCubeFilter(exp, paramValues); 78 return cubeFilter; 80 } 81 82 88 public static Map mergeParamValues(Map values, Map defaultparameterValues) { 89 Map defParams; 90 if (defaultparameterValues != null) { 91 defParams = defaultparameterValues; 92 } 93 else { 94 defParams = new HashMap(); 95 } 96 Map returnValues = new HashMap(); 97 Iterator keys; 98 if (values != null) { 99 keys = values.keySet().iterator(); 100 while (keys.hasNext()) { 101 String key = (String ) keys.next(); 102 returnValues.put(key, values.get(key)); 103 } 104 } 105 keys = defParams.keySet().iterator(); 106 while (keys.hasNext()) { 107 String key = (String ) keys.next(); 108 returnValues.put(key, defParams.get(key)); 109 } 110 return returnValues; 111 } 112 113 119 public static Map mergeParamValues(Map values, ParameterValues defaultParameterValues) { 120 return mergeParamValues(values, paramValuesDictFromParameterValues(defaultParameterValues)); 121 } 122 123 128 private static Map paramValuesDictFromParameterValues(ParameterValues parameterValues) { 129 Map returnValues = new HashMap(); 130 if (parameterValues != null){ 131 for (int i = 0; i < parameterValues.getParameterValueCount(); i++) { 132 ParameterValue parameterValue = parameterValues.getParameterValue(i); 133 String parameterValueKey = parameterValue.getFilterDefinitionName() + parameterValue.getFilterParameter().toString(); 134 returnValues.put(parameterValueKey, parameterValue.getDefaultValue()); 135 } 136 } 137 return returnValues; 138 } 139 140 public static Object getConstatValue(int mode, Object o, ReportDataSourceSpec dataSourceSpec, int dataType) { 141 switch (mode) { 142 case VARMODE_INDEX: 143 return o; 144 case VARMODE_DATAINDEX: 145 return o; 146 case VARMODE_NAME: 147 return o; 148 case VARMODE_EXTERNALDATA: 149 try { 150 return getExternalData(o, dataSourceSpec, dataType); 151 }catch(Exception e){ 152 e.printStackTrace(); 155 return o; 156 } 157 } 158 return null; 159 } 160 161 public static Object getExternalData(Object o, ReportDataSourceSpec dataSourceSpec, int dataType) throws InfoException{ 162 switch(dataType){ 163 case ReportDataType.DATETIME_TYPE: 164 case ReportDataType.DATE_TYPE: 165 if (o == "" && dataSourceSpec != null){ 166 return new String ("' '"); 167 }else if(dataSourceSpec != null) { 168 String formatedDate; 169 DateFormat dateFormat; 170 String pattern = dataSourceSpec.getPattern(dataType); 171 if(pattern != null && !pattern.equalsIgnoreCase("")){ 172 dateFormat = new SimpleDateFormat (pattern); 173 }else{ 174 dateFormat = new SimpleDateFormat ("yyyyMMdd"); 175 } 176 if(o instanceof SharedDate ){ 177 formatedDate = dateFormat.format(((SharedDate)o).getDateEx().getDate()); 178 }else if(o instanceof Date){ 179 formatedDate = dateFormat.format((Date)o); 180 }else{ 181 formatedDate = dateFormat.format(new DateEx(o.toString()).getDate()); 182 } 183 return new String ("'"+formatedDate+"'"); 184 } else { 185 DateFormat dateFormat; 186 if(dataType==ReportDataType.DATETIME_TYPE){ 187 dateFormat = new SimpleDateFormat ("yyyyMMddHHmmssSSS"); 188 }else{ 189 dateFormat = new SimpleDateFormat ("yyyyMMdd"); 190 } 191 Date date = (new DateEx(o.toString())).getDate(); 192 return dateFormat.format(date); 193 } 194 case ReportDataType.STRING_TYPE: 195 String value = o.toString().replaceAll("'", "''"); 196 return new String ("'"+value+"'"); 197 case ReportDataType.INTEGER_TYPE: 198 return ((SharedInteger)o).getValue(); 199 case ReportDataType.FLOAT_TYPE: 200 return ((SharedFloat)o).getValue(); 201 case ReportDataType.BOOLEAN_TYPE: 202 return ((Boolean )o).toString(); 203 } 204 return null; 205 } 206 207 } 208 | Popular Tags |