KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > calipso > reportgenerator > common > ReportFilterBuilder


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 JavaDoc;
17 import java.text.SimpleDateFormat JavaDoc;
18
19 /**
20  * Esta clase se utiliza para construir todos los filtros que se utilizan en la ejecución de un reporte, tanto los
21  * pre-filtros, como los post-filtros, resolver los valores de parámetros.
22  * Se encarga de procesar todos los objetos <code>ReportFilter</code> creados a partir de los <code>FilterDefinition</code>
23  * del <code>ReportDefinition</code> y el <code>ReportSourceDefinition</code> y generar un objeto <code>CubeFilter</code>
24  * que sirve para determinar si un registro del <code>DataSource</code> o de la <code>Matrix</code> del <code>ReportSource<code>
25  * cumplen con todas las condiciones.
26  * El objeto CubeFilter también es capaz de generar una condición para ser utilizada en una consulta OQL.
27  * Provee mecanismos para consolidar los valores de los parámetros ingresados por el usuario y completarlos con los valores
28  * de los parámetros que figuran el las definiciones correspondientes.
29  */

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   /**
41    * Constructor que inicializa el ReportFilterBuilder
42    * @param reportFilters
43    * @param paramValues
44    * @param mode
45    */

46   public ReportFilterBuilder(List reportFilters, Map paramValues, int mode) {
47     this.paramValues = paramValues;
48     this.reportFilters = reportFilters;
49     this.mode = mode;
50   }
51
52   /**
53    * Devuelve un filtro para el cubo
54    * @return
55    */

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 JavaDoc 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){ //!= null) {
75
//exp = new Expression();
76
}
77     cubeFilter = new ExpressionCubeFilter(exp, paramValues);
78     //}
79
return cubeFilter;
80   }
81
82   /**
83    * Sobrecarga los parameters values default con los valores del diccionario
84    * @param values
85    * @param defaultparameterValues
86    * @return
87    */

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 JavaDoc key = (String JavaDoc) keys.next();
102         returnValues.put(key, values.get(key));
103       }
104     }
105     keys = defParams.keySet().iterator();
106     while (keys.hasNext()) {
107       String JavaDoc key = (String JavaDoc) keys.next();
108       returnValues.put(key, defParams.get(key));
109     }
110     return returnValues;
111   }
112
113   /**
114    * Sobrecarga los parameters values default con los valores del diccionario
115    * @param values
116    * @param defaultParameterValues
117    * @return
118    */

119   public static Map mergeParamValues(Map values, ParameterValues defaultParameterValues) {
120     return mergeParamValues(values, paramValuesDictFromParameterValues(defaultParameterValues));
121   }
122
123   /**
124    * Retorna un diccionario a partir de un ParameterValues
125    * @param parameterValues
126    * @return
127    */

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 JavaDoc parameterValueKey = parameterValue.getFilterDefinitionName() + parameterValue.getFilterParameter().toString();
134         returnValues.put(parameterValueKey, parameterValue.getDefaultValue());
135       }
136     }
137     return returnValues;
138   }
139
140   public static Object JavaDoc getConstatValue(int mode, Object JavaDoc 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 JavaDoc e){
152           //Este error se da para objetos "fecha". Puede ser un error de especificación de reporte
153
//Si ocurre, el objeto se guardará en su estado original, para no "romper" el reporte
154
e.printStackTrace();
155           return o;
156         }
157     }
158     return null;
159   }
160
161   public static Object JavaDoc getExternalData(Object JavaDoc 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 JavaDoc("' '");
167         }else if(dataSourceSpec != null) {
168           String JavaDoc formatedDate;
169           DateFormat JavaDoc dateFormat;
170           String JavaDoc pattern = dataSourceSpec.getPattern(dataType);
171           if(pattern != null && !pattern.equalsIgnoreCase("")){
172             dateFormat = new SimpleDateFormat JavaDoc(pattern);
173           }else{
174             dateFormat = new SimpleDateFormat JavaDoc("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 JavaDoc("'"+formatedDate+"'");
184         } else {
185           DateFormat JavaDoc dateFormat;
186           if(dataType==ReportDataType.DATETIME_TYPE){
187             dateFormat = new SimpleDateFormat JavaDoc("yyyyMMddHHmmssSSS");
188           }else{
189             dateFormat = new SimpleDateFormat JavaDoc("yyyyMMdd");
190           }
191           Date date = (new DateEx(o.toString())).getDate();
192           return dateFormat.format(date);
193         }
194       case ReportDataType.STRING_TYPE:
195         String JavaDoc value = o.toString().replaceAll("'", "''");
196         return new String JavaDoc("'"+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 JavaDoc)o).toString();
203     }
204     return null;
205   }
206
207 }
208
Popular Tags