Skip to content

Commit

Permalink
MONDRIAN: Add 'visibility' flag to members of virtual cubes.(RFE 1542…
Browse files Browse the repository at this point in the history
…526, "Ability to hide virtual cube measures.")

[git-p4: depot-paths = "//open/mondrian/": change = 7497]
  • Loading branch information
julianhyde committed Aug 28, 2006
1 parent ca8a79d commit 029a6b9
Show file tree
Hide file tree
Showing 14 changed files with 344 additions and 181 deletions.
6 changes: 6 additions & 0 deletions src/main/mondrian/olap/Mondrian.xml
Expand Up @@ -285,6 +285,12 @@ Revision is $Id$
Unique name of the measure within its cube.
</Doc>
</Attribute>
<Attribute name="visible" type="Boolean" required="false">
<Doc>
Whether this member is visible in the user-interface.
Default true.
</Doc>
</Attribute>
</Element>

<!-- DimensionUsage =================================================== -->
Expand Down
6 changes: 4 additions & 2 deletions src/main/mondrian/olap/fun/VisualTotalsFunDef.java
Expand Up @@ -192,8 +192,10 @@ private static class VisualTotalMember extends RolapMember {
Member member,
String name,
final Exp exp) {
super(member.getParentMember(), (RolapLevel) member.getLevel(),
null, name, FORMULA_MEMBER_TYPE);
super(
(RolapMember) member.getParentMember(),
(RolapLevel) member.getLevel(),
null, name, FORMULA_MEMBER_TYPE);
this.member = member;
this.exp = exp;
}
Expand Down
24 changes: 12 additions & 12 deletions src/main/mondrian/rolap/RolapAggregationManager.java
Expand Up @@ -54,19 +54,19 @@ static CellRequest makeRequest(
Member[] members,
boolean extendedContext,
final boolean drillThrough) {
if (!(members[0] instanceof RolapStoredMeasure)) {
Map mapLevelToColumn;
CellRequest request;
if (members[0] instanceof RolapStoredMeasure) {
RolapStoredMeasure measure = (RolapStoredMeasure) members[0];
final RolapStar.Measure starMeasure =
(RolapStar.Measure) measure.getStarMeasure();
assert starMeasure != null;
RolapStar star = starMeasure.getStar();
request = new CellRequest(starMeasure, extendedContext, drillThrough);
mapLevelToColumn = star.getMapLevelToColumn(measure.getCube());
} else {
return null;
}
RolapStoredMeasure measure = (RolapStoredMeasure) members[0];
final RolapStar.Measure starMeasure =
(RolapStar.Measure) measure.getStarMeasure();

Util.assertTrue(starMeasure != null);

RolapStar star = starMeasure.getStar();
CellRequest request =
new CellRequest(starMeasure, extendedContext, drillThrough);
Map mapLevelToColumn = star.getMapLevelToColumn(measure.getCube());

// Since 'request.extendedContext == false' is a well-worn code path,
// we have moved the test outside the loop.
Expand Down Expand Up @@ -169,7 +169,7 @@ public Object getCellFromCache(Member[] members) {

public Object getCell(Member[] members) {
CellRequest request = makeRequest(members, false, false);
RolapMeasure measure = (RolapMeasure) members[0];
RolapStoredMeasure measure = (RolapStoredMeasure) members[0];
final RolapStar.Measure starMeasure = (RolapStar.Measure)
measure.getStarMeasure();

Expand Down
120 changes: 120 additions & 0 deletions src/main/mondrian/rolap/RolapBaseCubeMeasure.java
@@ -0,0 +1,120 @@
/*
// $Id$
// This software is subject to the terms of the Common Public License
// Agreement, available at the following URL:
// http://www.opensource.org/licenses/cpl.html.
// Copyright (C) 2006-2006 Julian Hyde
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
*/
package mondrian.rolap;

import mondrian.olap.*;

import java.util.List;
import java.util.Arrays;

/**
* Measure which is computed from a SQL column (or expression) and which is
* defined in a non-virtual cube.
*
* @see RolapVirtualCubeMeasure
*
* @author jhyde
* @since 24 August, 2006
* @version $Id$
*/
class RolapBaseCubeMeasure extends RolapMember implements RolapStoredMeasure {

private static final List datatypeList = Arrays.asList(
new String[] {"Integer", "Numeric", "String"});

/**
* For SQL generator. Column which holds the value of the measure.
*/
private final MondrianDef.Expression expression;

/**
* For SQL generator. Has values "SUM", "COUNT", etc.
*/
private final RolapAggregator aggregator;

private final RolapCube cube;

/**
* Holds the {@link mondrian.rolap.RolapStar.Measure} from which this
* member is computed. Untyped, because another implementation might store
* it somewhere else.
*/
private Object starMeasure;

private CellFormatter formatter;

RolapBaseCubeMeasure(
RolapCube cube,
RolapMember parentMember,
RolapLevel level,
String name,
String formatString,
MondrianDef.Expression expression,
String aggregatorName,
String datatype) {
super(parentMember, level, name);
this.cube = cube;
this.expression = expression;
if (formatString == null) {
formatString = "";
}
setProperty(
Property.FORMAT_EXP.name,
Literal.createString(formatString));
this.aggregator = (RolapAggregator)
RolapAggregator.enumeration.getValue(aggregatorName, true);
if (this.aggregator == null) {
throw Util.newError("Unknown aggregator '" + aggregatorName + "'");
}
setProperty(Property.AGGREGATION_TYPE.name, aggregator);
if (datatype == null) {
if (aggregator == RolapAggregator.Count ||
aggregator == RolapAggregator.DistinctCount) {
datatype = "Integer";
} else {
datatype = "Numeric";
}
}
// todo: End-user error.
Util.assertTrue(RolapBaseCubeMeasure.datatypeList.contains(datatype),
"invalid datatype " + datatype);
setProperty(Property.DATATYPE.name, datatype);
}

public MondrianDef.Expression getMondrianDefExpression() {
return expression;
}

public RolapAggregator getAggregator() {
return aggregator;
}

public RolapCube getCube() {
return cube;
}

public CellFormatter getFormatter(){
return formatter;
}

public void setFormatter(CellFormatter formatter){
this.formatter = formatter;
}

public Object getStarMeasure() {
return starMeasure;
}

void setStarMeasure(Object starMeasure) {
this.starMeasure = starMeasure;
}
}

// End RolapBaseCubeMeasure.java
6 changes: 2 additions & 4 deletions src/main/mondrian/rolap/RolapCell.java
Expand Up @@ -37,11 +37,9 @@ public String getFormattedValue() {
final Evaluator evaluator = result.getEvaluator(pos);
RolapCube c = (RolapCube) evaluator.getCube();
Dimension measuresDim = c.getMeasuresHierarchy().getDimension();
Member m = evaluator.getContext(measuresDim);
RolapMeasure m = (RolapMeasure) evaluator.getContext(measuresDim);

CellFormatter cf = (m instanceof RolapStoredMeasure)
? ((RolapStoredMeasure)m).getFormatter()
: null;
CellFormatter cf = m.getFormatter();
return (cf != null)
? cf.formatCell(value)
: evaluator.format(value);
Expand Down

0 comments on commit 029a6b9

Please sign in to comment.