KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > rolap > RolapBaseCubeMeasure


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/rolap/RolapBaseCubeMeasure.java#6 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 2006-2006 Julian Hyde
7 // All Rights Reserved.
8 // You must accept the terms of that agreement to use this software.
9 */

10 package mondrian.rolap;
11
12 import mondrian.olap.*;
13 import mondrian.rolap.sql.SqlQuery;
14 import mondrian.resource.MondrianResource;
15
16 import java.util.List JavaDoc;
17 import java.util.Arrays JavaDoc;
18
19 /**
20  * Measure which is computed from a SQL column (or expression) and which is
21  * defined in a non-virtual cube.
22  *
23  * @see RolapVirtualCubeMeasure
24  *
25  * @author jhyde
26  * @since 24 August, 2006
27  * @version $Id: //open/mondrian/src/main/mondrian/rolap/RolapBaseCubeMeasure.java#6 $
28  */

29 class RolapBaseCubeMeasure extends RolapMember implements RolapStoredMeasure {
30
31     private static final List JavaDoc<String JavaDoc> datatypeList =
32         Arrays.asList("Integer", "Numeric", "String");
33
34     /**
35      * For SQL generator. Column which holds the value of the measure.
36      */

37     private final MondrianDef.Expression expression;
38
39     /**
40      * For SQL generator. Has values "SUM", "COUNT", etc.
41      */

42     private final RolapAggregator aggregator;
43
44     private final RolapCube cube;
45
46     /**
47      * Holds the {@link mondrian.rolap.RolapStar.Measure} from which this
48      * member is computed. Untyped, because another implementation might store
49      * it somewhere else.
50      */

51     private Object JavaDoc starMeasure;
52
53     private CellFormatter formatter;
54
55     RolapBaseCubeMeasure(
56             RolapCube cube,
57             RolapMember parentMember,
58             RolapLevel level,
59             String JavaDoc name,
60             String JavaDoc formatString,
61             MondrianDef.Expression expression,
62             String JavaDoc aggregatorName,
63             String JavaDoc datatype) {
64         super(parentMember, level, name);
65         this.cube = cube;
66         this.expression = expression;
67         if (formatString == null) {
68             formatString = "";
69         }
70         setProperty(
71                 Property.FORMAT_EXP.name,
72                 Literal.createString(formatString));
73
74         // Validate aggregator.
75
this.aggregator =
76             RolapAggregator.enumeration.getValue(aggregatorName, false);
77         if (this.aggregator == null) {
78             StringBuilder JavaDoc buf = new StringBuilder JavaDoc();
79             for (String JavaDoc aggName : RolapAggregator.enumeration.getNames()) {
80                 if (buf.length() > 0) {
81                     buf.append(", ");
82                 }
83                 buf.append('\'');
84                 buf.append(aggName);
85                 buf.append('\'');
86             }
87             throw MondrianResource.instance().UnknownAggregator.ex(
88                 aggregatorName,
89                 buf.toString());
90         }
91
92         setProperty(Property.AGGREGATION_TYPE.name, aggregator);
93         if (datatype == null) {
94             if (aggregator == RolapAggregator.Count ||
95                     aggregator == RolapAggregator.DistinctCount) {
96                 datatype = "Integer";
97             } else {
98                 datatype = "Numeric";
99             }
100         }
101         // todo: End-user error.
102
Util.assertTrue(
103             RolapBaseCubeMeasure.datatypeList.contains(datatype),
104             "invalid datatype " + datatype);
105         setProperty(Property.DATATYPE.name, datatype);
106     }
107
108     public MondrianDef.Expression getMondrianDefExpression() {
109         return expression;
110     }
111
112     public RolapAggregator getAggregator() {
113         return aggregator;
114     }
115
116     public RolapCube getCube() {
117         return cube;
118     }
119
120     public CellFormatter getFormatter(){
121         return formatter;
122     }
123
124     public void setFormatter(CellFormatter formatter){
125         this.formatter = formatter;
126     }
127
128     public Object JavaDoc getStarMeasure() {
129         return starMeasure;
130     }
131
132     void setStarMeasure(Object JavaDoc starMeasure) {
133         this.starMeasure = starMeasure;
134     }
135
136     public SqlQuery.Datatype getDatatype() {
137         Object JavaDoc datatype = getPropertyValue(Property.DATATYPE.name);
138         try {
139             return SqlQuery.Datatype.valueOf((String JavaDoc) datatype);
140         } catch (ClassCastException JavaDoc e) {
141             return SqlQuery.Datatype.String;
142         } catch (IllegalArgumentException JavaDoc e) {
143             return SqlQuery.Datatype.String;
144         }
145     }
146 }
147
148 // End RolapBaseCubeMeasure.java
149
Popular Tags