001: package com.calipso.reportgenerator.reportmanager;
002:
003: import com.calipso.reportgenerator.reportcalculator.*;
004: import com.calipso.reportgenerator.common.*; //import com.calipso.reportgenerator.reportcalculator.DataSource;
005: import com.calipso.reportgenerator.common.InfoException;
006: import com.calipso.reportgenerator.reportdefinitions.types.ReportDataType;
007: import com.calipso.common.DateEx;
008:
009: import java.util.*;
010:
011: /**
012: * Esta clase en la encargada de obtener los datos necesarios para ejecutar un reporte
013: */
014:
015: public abstract class ReportDataSource {
016:
017: private ReportDataSourceSpec dataSourceSpec;
018: private ReportSpec reportSpec;
019: private Vector columnNames;
020: private ExpressionCubeFilter filter;
021: private ReportGeneratorConfiguration reportGeneratorConfiguration;
022:
023: /**
024: * Retorna la configuración del report manager
025: * @return configuración
026: */
027: public ReportGeneratorConfiguration getReportGeneratorConfiguration() {
028: return reportGeneratorConfiguration;
029: }
030:
031: /**
032: * Asigna la configuración del report manager
033: * @param reportGeneratorConfiguration
034: */
035: public void setGeneratorConfiguration(
036: ReportGeneratorConfiguration reportGeneratorConfiguration) {
037: this .reportGeneratorConfiguration = reportGeneratorConfiguration;
038: }
039:
040: /**
041: * Constructor por defecto
042: */
043: public ReportDataSource() {
044:
045: }
046:
047: /**
048: * Constructor que inicializa el objeto
049: * @param reportSpec
050: * @param reportDataSourceSpec
051: */
052: public ReportDataSource(ReportSpec reportSpec,
053: ReportDataSourceSpec reportDataSourceSpec) {
054: this .dataSourceSpec = reportDataSourceSpec;
055: this .reportSpec = reportSpec;
056: initialize();
057: }
058:
059: /**
060: * Inicializa el objeto
061: */
062: protected void initialize() {
063: }
064:
065: /**
066: * Devuelve la Definición del Origen de un Reporte
067: * @return devuelve la Definición del Origen de un Reporte
068: */
069: public ReportSpec getReportSpec() {
070: return reportSpec;
071: }
072:
073: /**
074: * Devuelve el <code>ReportSourceDef</code>
075: * @return ReportSourceDef
076: */
077: public ReportDataSourceSpec getReportDataSourceSpec() {
078: return dataSourceSpec;
079: }
080:
081: /**
082: * Método abstracto que devuelve la Definición del Origen de un Reporte
083: * @return devuelve un objeto de tipo IDataSource
084: */
085: public abstract IDataSource getDataSource(Matrix matrix)
086: throws InfoException;
087:
088: /**
089: * Obtiene y devuelve un datasource
090: * @see com.calipso.reportgenerator.reportcalculator.DataSource
091: * @return
092: * @throws InfoException
093: */
094: public IDataSource newDataSource() throws InfoException {
095: try {
096: return new DataSource(getColumnNames());
097: //return DataSourceBuilder.buildDataSource(getColumnNames(), getReportGeneratorConfiguration(), getReportSpec().getSourceId());
098: } catch (InfoException e) {
099: throw new InfoException(LanguageTraslator.traslate("79"), e);
100: }
101: }
102:
103: /**
104: * Devuelve la lista de nombres de columnas
105: * @return columnNames
106: */
107: protected Vector getColumnNames() {
108: if (columnNames == null) {
109: columnNames = new Vector();
110: initializeColumnNames(columnNames);
111: }
112: return columnNames;
113: }
114:
115: private void parseColumnNamesFrom(Collection names,
116: Collection fieldSpecs) {
117: Iterator iterator = fieldSpecs.iterator();
118: while (iterator.hasNext()) {
119: ReportFieldSpec fieldSpec = (ReportFieldSpec) iterator
120: .next();
121: if (!fieldSpec.getCalculated()) {
122: names.add(fieldSpec.getName());
123: }
124: }
125: }
126:
127: /**
128: * Agrega a la lista de columnas los nombres recorriendo las listas de dimensiones y métricas de la definición del reporte
129: * @param names
130: */
131: private void initializeColumnNames(Collection names) {
132: Collection dimensions = getReportSpec().getDimensionsByIndex();
133: Collection metrics = getReportSpec().getMetricsByIndex();
134: parseColumnNamesFrom(names, dimensions);
135: parseColumnNamesFrom(names, metrics);
136: }
137:
138: /**
139: * Devuelve el filtro(Filter)
140: * @return filtro
141: */
142: public ExpressionCubeFilter getFilter() {
143: return filter;
144: }
145:
146: /**
147: * Asigan el filter(Filtro)
148: * @param filter
149: */
150: public void setFilter(ExpressionCubeFilter filter) {
151: this .filter = filter;
152: }
153:
154: /**
155: * Método abstracto para definir el tipo de filtro
156: */
157: public abstract int getFilterVarMode();
158:
159: public Object getValueForMetric(Object value,
160: ReportMetricSpec metric, Object[] collection, int i)
161: throws InfoException {
162: collection[i] = value;
163: return metric.getValue(collection);
164: }
165:
166: public Object getValueForDimension(Object value,
167: ReportDimensionSpec dimension, Object[] collection, int i)
168: throws InfoException {
169: try {
170: switch (dimension.getDataType().getType()) {
171: case ReportDataType.FLOAT_TYPE:
172: if (value != null) {
173: value = SharedFloat.newFrom(new Float(value
174: .toString().trim()));
175: } else {
176: value = null;
177: }
178: break;
179: case ReportDataType.INTEGER_TYPE:
180: value = SharedInteger.newFrom(new Integer(value
181: .toString().trim()));
182: break;
183: case ReportDataType.STRING_TYPE:
184: value = value.toString().trim().intern();//SharedString.newFrom(value.toString().trim());
185: break;
186: case ReportDataType.DATETIME_TYPE:
187: case ReportDataType.DATE_TYPE:
188: DateEx dateEx;
189: if (value instanceof Date) {
190: dateEx = new DateEx((Date) value);
191: } else {
192: dateEx = new DateEx(value,
193: getReportDataSourceSpec().getPattern(
194: getReportSpec()
195: .getDimensionFromIndex(i)
196: .getDataType().getType()));
197: }
198: value = SharedDate.newFrom(dateEx);
199: break;
200: default:
201: value = value.toString().trim().intern();//SharedString.newFrom(value.toString().trim());
202: break;
203: }
204: } catch (Exception e) {
205: if (value == null) {
206: value = "".intern();//SharedString.newFrom("");
207: } else {
208: value = value.toString().trim().intern();//SharedString.newFrom(value.toString().trim());
209: }
210: }
211: collection[i] = value;
212: return dimension
213: .getValue(collection, getReportDataSourceSpec());
214: }
215:
216: }
|