1 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 ; 17 import java.util.Arrays ; 18 19 29 class RolapBaseCubeMeasure extends RolapMember implements RolapStoredMeasure { 30 31 private static final List <String > datatypeList = 32 Arrays.asList("Integer", "Numeric", "String"); 33 34 37 private final MondrianDef.Expression expression; 38 39 42 private final RolapAggregator aggregator; 43 44 private final RolapCube cube; 45 46 51 private Object starMeasure; 52 53 private CellFormatter formatter; 54 55 RolapBaseCubeMeasure( 56 RolapCube cube, 57 RolapMember parentMember, 58 RolapLevel level, 59 String name, 60 String formatString, 61 MondrianDef.Expression expression, 62 String aggregatorName, 63 String 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 this.aggregator = 76 RolapAggregator.enumeration.getValue(aggregatorName, false); 77 if (this.aggregator == null) { 78 StringBuilder buf = new StringBuilder (); 79 for (String 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 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 getStarMeasure() { 129 return starMeasure; 130 } 131 132 void setStarMeasure(Object starMeasure) { 133 this.starMeasure = starMeasure; 134 } 135 136 public SqlQuery.Datatype getDatatype() { 137 Object datatype = getPropertyValue(Property.DATATYPE.name); 138 try { 139 return SqlQuery.Datatype.valueOf((String ) datatype); 140 } catch (ClassCastException e) { 141 return SqlQuery.Datatype.String; 142 } catch (IllegalArgumentException e) { 143 return SqlQuery.Datatype.String; 144 } 145 } 146 } 147 148 | Popular Tags |