001: package com.calipso.reportgenerator.common;
002:
003: import com.calipso.reportgenerator.reportcalculator.DataDefinition;
004:
005: import java.io.Serializable;
006: import java.util.Map;
007:
008: /**
009: * Esta clase representa a un campo que tendrá un valor en la matrix que sirve de origen de datos al motor de cálculo
010: * para la ejecución de un ReportDefinition dado (y su ReportSourceDefinition asociado).
011: * Puede que existan o no en el DataSource, en dicho caso el valor se obtiene evaluando expresiones a partir de valores
012: * campos conocidos.
013: */
014: public class ReportFieldSpec implements DataDefinition, Serializable {
015:
016: private int dataSourceIndex;
017: private int reportSourceIndex;
018: private int reportIndex;
019: private String name;
020: private String caption;
021: private boolean calculated;
022: private String externalData;
023: private Map dataSourceIndexes;
024: private boolean inReportDefinition;
025: private Map reportSourceIndexes;
026:
027: /**
028: * Construcutor por defecto para cumplir con la Serialización
029: */
030:
031: public ReportFieldSpec() {
032: }
033:
034: /**
035: * Constructor que recibe el nombre que es el identificador de este tipo de objetos
036: * @param name
037: */
038: public ReportFieldSpec(String name) {
039: this .name = name;
040: }
041:
042: /**
043: * Devuelve el nombre del campo
044: * @return
045: */
046: public String getName() {
047: return name;
048: }
049:
050: /**
051: * Asigna el nombre del campo
052: * @param name
053: */
054: public void setName(String name) {
055: this .name = name;
056: }
057:
058: /**
059: * Devuelve la descripción o texto legible del campo
060: * @return
061: */
062: public String getCaption() {
063: return caption;
064: }
065:
066: /**
067: * Asigna la descripción o text legible del campo
068: * @param caption
069: */
070: public void setCaption(String caption) {
071: this .caption = caption;
072: }
073:
074: /**
075: * Indice respecto a los campos de la del Matix
076: * Implementación de la interface <code>DataDefinition</code>
077: * @return
078: */
079: public int getIndex() {
080: return getReportSourceIndex();
081: }
082:
083: /**
084: * Especifica si el valor del campo se obtiene directamente del valor de un campo del <code>IDataSource</code>(false)
085: * o si se calcula a través de una expresión (true)
086: * @return
087: */
088: public boolean getCalculated() {
089: return calculated;
090: }
091:
092: /**
093: * Asigna el valor de la propiedad Calculated
094: * @param calculated
095: */
096: public void setCalculated(boolean calculated) {
097: this .calculated = calculated;
098: }
099:
100: /**
101: * Devuelve la información asiciada al campo que será utilizada por el sistema externo que devuelva el <code>IDataSource</code>
102: * @return
103: */
104:
105: public String getExternalData() {
106: return externalData;
107: }
108:
109: /**
110: * Asigna el valor de la propiedad ExternalData
111: * @param externalData
112: */
113:
114: public void setExternalData(String externalData) {
115: this .externalData = externalData;
116: }
117:
118: /**
119: * Devuelve el indice del campo en el DataSource, esto quiere decir que los campos que tengan el atributo
120: * <code>calculated</code> en <code>true</code> tendrán este indice con valor -1.
121: * @return
122: */
123: public int getDataSourceIndex() {
124: return dataSourceIndex;
125: }
126:
127: /**
128: * Asigna el valor de la propiedad DataSourceIndex
129: * @param dataSourceIndex
130: */
131:
132: public void setDataSourceIndex(int dataSourceIndex) {
133: this .dataSourceIndex = dataSourceIndex;
134: }
135:
136: /**
137: * Devuelve el indice respecto a los campos de la de la Matix
138: */
139:
140: public int getReportSourceIndex() {
141: return reportSourceIndex;
142: }
143:
144: /**
145: * Asigna el indice respecto de los campos de la Matrix
146: * @param reportSourceIndex
147: */
148:
149: public void setReportSourceIndex(int reportSourceIndex) {
150: this .reportSourceIndex = reportSourceIndex;
151: }
152:
153: /**
154: * Devuelve el indice respecto a los campos de la de la ReportDefinition
155: * @return
156: */
157: public int getReportIndex() {
158: return reportIndex;
159: }
160:
161: /**
162: * Asigna el indice respecto a los campos de la de la ReportDefinition
163: * @param reportIndex
164: */
165: public void setReportIndex(int reportIndex) {
166: this .reportIndex = reportIndex;
167: }
168:
169: /**
170: * Devuelve el indice de otro campo a partir del nombre, se utiliza para la evaluación de expresiones de campos
171: * calculados
172: * @param referencedName
173: * @return
174: */
175: protected int getDataSourceIndexFromName(String referencedName) {
176: return ((Integer) getDataSourceIndexes().get(referencedName))
177: .intValue();
178: }
179:
180: /**
181: * Diccionario que asocia los nombres de los campos con sus ReportSourceIndex
182: * @return
183: */
184:
185: public Map getDataSourceIndexes() {
186: return dataSourceIndexes;
187: }
188:
189: public Map getReportSourceIndexes() {
190: return reportSourceIndexes;
191: }
192:
193: public void setReportSourceIndexes(Map reportSourceIndexes) {
194: this .reportSourceIndexes = reportSourceIndexes;
195: }
196:
197: /**
198: * Asigna el diccionario que asocia los nombres de los campos con sus ReportSourceIndex
199: * Se para a todos los campos una referencia a la misma lista.
200: * @param values
201: */
202: public void setDataSourceIndexes(Map values) {
203: dataSourceIndexes = values;
204: }
205:
206: /**
207: * Se utiliza para saber si un campo se encuentra incluido en el ReportDefinition, debido a que un mismo
208: * ReportSourceDefinition puede ser compartido por varios ReportDefinition, puede haber campos que no deban ser tenidos
209: * en cuanta para la resoución de un reporte
210: * @return
211: */
212: public boolean getInReportDefinition() {
213: return inReportDefinition;
214: }
215:
216: /**
217: * Asigna el verdadero si el campo está incluido en el ReportDefinition del reporte que se está ejecutando
218: * @param inReportDefinition
219: */
220: public void setInReportDefinition(boolean inReportDefinition) {
221: this .inReportDefinition = inReportDefinition;
222: }
223:
224: /**
225: * Resuelve el texto visible de la descripción de un campo según la localización
226: * @param multilanguaje
227: * @param localization
228: * @param caption
229: * @return
230: */
231: protected String resolveCaption(boolean multilanguaje,
232: Map localization, String caption) {
233: if (multilanguaje && (localization != null)
234: && (caption != null)
235: && localization.containsKey(caption)) {
236: return localization.get(caption).toString();
237: } else if ((localization != null) && (caption != null)
238: && (localization.containsKey(caption))) {
239: return localization.get(caption).toString();
240: } else {
241: return caption;
242: }
243: }
244:
245: }
|