1 package com.calipso.reportgenerator.common; 2 3 import com.calipso.reportgenerator.reportdefinitions.types.FilterDefinitionFilterTypeType; 4 import com.calipso.reportgenerator.reportcalculator.expression.*; 5 import com.calipso.reportgenerator.common.ReportSpec; 6 import com.calipso.reportgenerator.common.ReportFilterSpec; 7 import com.calipso.reportgenerator.common.ReportDimensionSpec; 8 9 import java.util.*; 10 import java.io.Serializable ; 11 12 15 16 public class ReportFilter implements Serializable { 17 18 private ReportFilterSpec filterSpec; 19 20 24 public ReportFilter(ReportFilterSpec filterSpec) { 25 this.filterSpec = filterSpec; 26 } 27 28 32 public ReportFilterSpec getFilterSpec() { 33 return filterSpec; 34 } 35 36 42 public Expression getExpression(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) throws InfoException{ 43 44 switch (getFilterSpec().getFilterType().getType()) { 45 case FilterDefinitionFilterTypeType.RANGE_TYPE: 46 return getRangeExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 47 case FilterDefinitionFilterTypeType.GREATERTHAN_TYPE: 48 return getGraterThanExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 49 case FilterDefinitionFilterTypeType.LESSTHAN_TYPE: 50 return getLessThanExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 51 case FilterDefinitionFilterTypeType.EQUALTO_TYPE: 52 return getEqualToExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 53 case FilterDefinitionFilterTypeType.BEGINWITH_TYPE: 54 return getBeginWithExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 55 case FilterDefinitionFilterTypeType.ENDWITH_TYPE: 56 return getEndWithExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 57 case FilterDefinitionFilterTypeType.INCLUDES_TYPE: 58 return getIncludesExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 59 case FilterDefinitionFilterTypeType.IN_TYPE: 60 return getInExp(paramValues, mode, reportSpec, dataSourceSpec, reportFilter); 61 default: 62 return null; 63 } 64 } 65 66 private Expression getInExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) throws InfoException{ 67 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 68 Collection values = getValues(mode,dataSourceSpec, dimensionSpec , paramValues.get(getParamKey("VALUES")).toString()); 69 return new InExp(new VariableExp(getVariableName(mode, reportSpec)), values); 70 } 71 72 public Collection getValues(int mode, ReportDataSourceSpec data, ReportDimensionSpec dimensionSpec, String s) throws InfoException{ 73 try{ 74 return filterSpec.getValues(mode, data, dimensionSpec, s); 75 }catch (Exception e){ 76 throw new InfoException("85",e); 77 } 78 } 79 80 85 private Object getVariableName(int mode, ReportSpec reportSpec) { 86 87 89 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(getFilterSpec().getDimensionName()); 90 switch (mode) { 91 case ReportFilterBuilder.VARMODE_INDEX: 92 return new Integer (dimensionSpec.getReportSourceIndex()); 93 case ReportFilterBuilder.VARMODE_DATAINDEX: 94 return new Integer (dimensionSpec.getDataSourceIndex()); 95 case ReportFilterBuilder.VARMODE_NAME: 96 return dimensionSpec.getName(); 97 case ReportFilterBuilder.VARMODE_EXTERNALDATA: 98 return dimensionSpec.getExternalData(); 99 } 100 return null; 101 } 102 103 108 private String getParamKey(String filterParam) { 109 return getFilterSpec().getName() + filterParam; 110 } 111 112 118 private Expression getIncludesExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter ) { 119 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 120 return new IncludesExp(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 121 } 122 123 129 private Expression getEndWithExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 130 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 131 return new EndsWithExp(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 132 } 133 134 140 141 private Expression getBeginWithExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 142 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 143 return new BeginsWithExp(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 144 } 145 146 152 private Expression getEqualToExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 153 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 154 return new EqualTo(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 155 } 156 157 163 private Expression getLessThanExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 164 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 165 return new LessThan(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 166 } 167 168 174 private Expression getGraterThanExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 175 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 176 return new GreaterThan(new VariableExp(getVariableName(mode, reportSpec)), new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(getParamKey("VALUE")), dataSourceSpec, dimensionSpec.getDataType().getType()))); 177 } 178 179 185 private Expression getRangeExp(Map paramValues, int mode, ReportSpec reportSpec, ReportDataSourceSpec dataSourceSpec, ReportFilter reportFilter) { 186 ReportDimensionSpec dimensionSpec = reportSpec.getDimensionFromName(reportFilter.getFilterSpec().getDimensionName()); 187 String fromKey = getParamKey("FROM"); 188 Expression subexp1 = new VariableExp(getVariableName(mode, reportSpec)).newGreaterOrEqualTo(new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(fromKey), dataSourceSpec, dimensionSpec.getDataType().getType()))); 189 String toKey = getParamKey("TO"); 190 Expression subexp2 = new VariableExp(getVariableName(mode, reportSpec)).newLessOrEquealTo(new ConstantExp(ReportFilterBuilder.getConstatValue(mode,paramValues.get(toKey), dataSourceSpec, dimensionSpec.getDataType().getType()))); 191 return subexp1.newAnd(subexp2); 192 } 193 } 194 | Popular Tags |