001: package com.calipso.reportgenerator.reportcalculator;
002:
003: import java.util.Arrays;
004: import java.io.Serializable;
005:
006: /**
007: * Representa la query para un reporte de tipo estatico.
008: */
009:
010: public class StaticQuery implements Serializable {
011: private int[] groupDimensions;
012: private int[] noGroupDimensions;
013: private int[] metrics;
014: private int[] accumulableMetrics;
015: private int[] dimensions;
016: private boolean[] ascending;
017: private ExpressionCubeFilter filter;
018: private EnumerationCubeFilter rankingFilter;
019:
020: public void setRankingFilter(EnumerationCubeFilter rankingFilter) {
021: this .rankingFilter = rankingFilter;
022: }
023:
024: /**
025: * Inicializa una nueva Query
026: */
027: public StaticQuery() {
028: initialize();
029: }
030:
031: /**
032: * Inicializa las estructuras que contendrán la información acerca de las dimensiones y métricas involucradas
033: */
034: private void initialize() {
035: setGroupDimensions(new int[0]);
036: setNoGroupDimensions(new int[0]);
037: setMetrics(new int[0]);
038: }
039:
040: /**
041: * Devuelve un array que contiene los indices de las dimensiones que agrupan
042: * @return
043: */
044: public int[] getGroupDimensions() {
045: return groupDimensions;
046: }
047:
048: /**
049: * Asigna un array que contiene los indices de las dimensiones que agrupan
050: * @param groupDimensions
051: */
052: public void setGroupDimensions(int[] groupDimensions) {
053: this .groupDimensions = groupDimensions;
054: }
055:
056: /**
057: * Devuelve un array que contiene los indices de las dimensiones que no agrupan
058: * @return
059: */
060: public int[] getNoGroupDimensions() {
061: return noGroupDimensions;
062: }
063:
064: /**
065: * Asigna un array que contiene los indices de las dimensiones que no agrupan
066: * @param noGroupDimensions
067: */
068: public void setNoGroupDimensions(int[] noGroupDimensions) {
069: this .noGroupDimensions = noGroupDimensions;
070: }
071:
072: /**
073: * Devuelve un array que contiene los indices de las metricas
074: * @return
075: */
076: public int[] getMetrics() {
077: return metrics;
078: }
079:
080: /**
081: * Devuelve un array que contiene los indices de las metricas acumulables
082: * @return
083: */
084: public int[] getAccumulableMetrics() {
085: return accumulableMetrics;
086: }
087:
088: /**
089: * Asigna un array que contiene los indices de las metricas
090: * @param metrics
091: */
092: public void setMetrics(int[] metrics) {
093: this .metrics = metrics;
094: }
095:
096: /**
097: * Asigna un array que contiene los indices de las metricas acumulables
098: * @param accumulableMetrics
099: */
100: public void setAccumulableMetrics(int[] accumulableMetrics) {
101: this .accumulableMetrics = accumulableMetrics;
102: }
103:
104: /**
105: * Devuelve un array que indica el criterio de orden
106: * de las dimensiones
107: * @return
108: */
109: public boolean[] getAscending() {
110: if (ascending == null) {
111: ascending = new boolean[dimensions.length];
112: Arrays.fill(ascending, true);
113: }
114: return ascending;
115: }
116:
117: /**
118: * Asigna un array que contiene el criterio de orden
119: * para las dimensiones
120: * @param ascending
121: */
122: public void setAscending(boolean[] ascending) {
123: this .ascending = ascending;
124: }
125:
126: /**
127: * Devuelve un array que contiene los indices
128: * de las dimensiones que agrupan y que no agrupan
129: * @return
130: */
131: public int[] getDimensions() {
132: if (dimensions == null) {
133: fillDimensions();
134: }
135: return dimensions;
136: }
137:
138: /**
139: * Llena un array que contiene los indices de las dimensiones
140: * que agrupan y aquellas que no agrupan.
141: */
142: private void fillDimensions() {
143: int groupLenght;
144: int noGroupLenght;
145: int dimensionsLenght;
146: int index;
147:
148: groupLenght = groupDimensions.length;
149: noGroupLenght = noGroupDimensions.length;
150: dimensionsLenght = groupLenght + noGroupLenght;
151: dimensions = new int[dimensionsLenght];
152: for (index = 0; index < groupLenght; ++index) {
153: dimensions[index] = groupDimensions[index];
154: }
155: for (index = 0; index < noGroupLenght; ++index) {
156: dimensions[index + groupLenght] = noGroupDimensions[index];
157: }
158: }
159:
160: public ExpressionCubeFilter getFilter() {
161: return filter;
162: }
163:
164: public void setFilter(ExpressionCubeFilter filter) {
165: this .filter = filter;
166: }
167:
168: /**
169: * Aplica el filtro a una row y devuelve verdadero si cumple con la condición
170: * @param row
171: * @return
172: */
173: public boolean matches(Object[] row) {
174: return ((filter == null) || filter.matches(row))
175: && ((rankingFilter == null) || rankingFilter
176: .matches(row));
177: }
178: }
|