mondrian.rolap
Class RolapMemberBase

java.lang.Object
  extended by mondrian.olap.OlapElementBase
      extended by mondrian.olap.MemberBase
          extended by mondrian.rolap.RolapMemberBase
All Implemented Interfaces:
Comparable, Annotated, Member, OlapElement, RolapCalculation, RolapMember
Direct Known Subclasses:
DelegatingRolapMember, RolapBaseCubeMeasure, RolapCalculatedMember, RolapHierarchy.RolapNullMember, RolapVirtualCubeMeasure, VisualTotalsFunDef.VisualTotalMember

public class RolapMemberBase
extends MemberBase
implements RolapMember

Basic implementation of a member in a RolapHierarchy.

Since:
10 August, 2001
Author:
jhyde

Nested Class Summary
static class RolapMemberBase.DefaultPropertyValueMapFactory
          Default RolapMemberBase.PropertyValueMapFactory implementation, used if MondrianProperties.PropertyValueMapFactoryClass is not set.
static interface RolapMemberBase.PropertyValueMapFactory
          Interface definition for the pluggable factory used to decide which implementation of Map to use to store property string/value pairs for member properties.
static class RolapMemberBase.PropertyValueMapFactoryFactory
          Creates the PropertyValueMapFactory which is in turn used to create property-value maps for member properties.
 
Nested classes/interfaces inherited from interface mondrian.olap.Member
Member.MemberType
 
Nested classes/interfaces inherited from interface mondrian.olap.OlapElement
OlapElement.LocalizedProperty
 
Field Summary
 
Fields inherited from class mondrian.olap.MemberBase
flags, level, parentMember, uniqueName
 
Fields inherited from class mondrian.olap.OlapElementBase
caption, visible
 
Constructor Summary
protected RolapMemberBase()
           
(package private) RolapMemberBase(RolapMember parentMember, RolapLevel level, Object value)
           
protected RolapMemberBase(RolapMember parentMember, RolapLevel level, Object key, String name, Member.MemberType memberType)
          Creates a RolapMemberBase.
 
Method Summary
protected  boolean childLevelHasApproxRowCount()
           
 int compareTo(Object o)
          Compares this member to another RolapMemberBase.
 boolean containsAggregateFunction()
          Returns whether this calculation contains an aggregate function.
 boolean equals(Object o)
           
 boolean equals(OlapElement o)
           
static List<List<Member>> getAllMembers(SchemaReader schemaReader, Hierarchy hierarchy)
          Returns a list of member lists where the first member list is the root members while the last member array is the leaf members.
 Map<String,Annotation> getAnnotationMap()
          Returns a list of annotations.
 Calc getCompiledExpression(RolapEvaluatorRoot root)
          Returns the compiled expression to evaluate the scalar value of the current cell.
 int getDepth()
          returns the depth of this member, which is not the level's depth in case of parent child dimensions
 RolapHierarchy getHierarchy()
           
static int getHierarchyCardinality(SchemaReader schemaReader, Hierarchy hierarchy)
           
 int getHierarchyOrdinal()
          Returns the ordinal of this calculation; to resolve ties.
 Object getKey()
           
 RolapLevel getLevel()
           
protected  org.apache.log4j.Logger getLogger()
           
 String getName()
           
 Comparable getOrderKey()
          Returns the order key of this member among its siblings.
 int getOrdinal()
          Returns the ordinal of this member within its hierarchy.
 RolapMember getParentMember()
          Returns this member's parent, or null (not the 'null member', as returned by Hierarchy.getNullMember()) if it has no parent.
 Property[] getProperties()
          Returns the definitions of the properties this member may have.
 String getPropertyFormattedValue(String propertyName)
          Returns the formatted value of the property named propertyName.
protected  Object getPropertyFromMap(String propertyName, boolean matchCase)
          Returns the value of a property by looking it up in the property map.
 Object getPropertyValue(String propertyName)
          Returns the value of the property named propertyName.
 Object getPropertyValue(String propertyName, boolean matchCase)
          Returns the value of the property named propertyName, matching according to the required case-sensitivity.
 int hashCode()
           
 boolean isAllMember()
          Deprecated. Use MemberBase.isAll(); will be removed in mondrian-4.0
 boolean isCalculatedInQuery()
          Returns whether this member is computed from a WITH MEMBER clause in an MDX query.
 boolean isHidden()
          Returns whether this member is 'hidden', as per the rules which define a ragged hierarchy.
 boolean isParentChildLeaf()
           
protected static String keyToString(Object key)
          Converts a key to a string to be used as part of the member's name and unique name.
(package private)  void makeUniqueName(HierarchyUsage hierarchyUsage)
           
 void setContextIn(RolapEvaluator evaluator)
          Pushes this calculated member or tuple onto the stack of evaluation contexts, and sets the context to the default member of the hierarchy.
 void setName(String name)
          Only allowable if the member is part of the WITH clause of a query.
(package private)  void setOrderKey(Comparable orderKey)
           
(package private)  void setOrdinal(int ordinal)
           
static void setOrdinals(SchemaReader schemaReader, Member seedMember)
          Sets member ordinal values using a Bottom-up/Top-down algorithm.
(package private)  void setParentMember(RolapMember parentMember)
          Sets a member's parent.
 void setProperty(String name, Object value)
          Sets a property of this member to a given value.
protected  void setUniqueName(Object key)
           
 
Methods inherited from class mondrian.olap.MemberBase
computeCalculated, getAncestorMembers, getCaption, getDataMember, getDescription, getDimension, getExpression, getMemberType, getParentUniqueName, getQualifiedName, getSolveOrder, getUniqueName, isAll, isCalculated, isChildOrEqualTo, isChildOrEqualTo, isEvaluated, isMeasure, isNull, lookupChild
 
Methods inherited from class mondrian.olap.OlapElementBase
clone, computeHashCode, getLocalized, isVisible, setCaption, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface mondrian.olap.Member
getAncestorMembers, getDataMember, getExpression, getMemberType, getParentUniqueName, getSolveOrder, isAll, isCalculated, isChildOrEqualTo, isEvaluated, isMeasure, isNull
 
Methods inherited from interface mondrian.olap.OlapElement
getCaption, getDescription, getDimension, getLocalized, getQualifiedName, getUniqueName, isVisible, lookupChild
 
Methods inherited from interface mondrian.rolap.RolapCalculation
getSolveOrder
 

Constructor Detail

RolapMemberBase

protected RolapMemberBase(RolapMember parentMember,
                          RolapLevel level,
                          Object key,
                          String name,
                          Member.MemberType memberType)
Creates a RolapMemberBase.

Parameters:
parentMember - Parent member
level - Level this member belongs to
key - Key to this member in the underlying RDBMS
name - Name of this member
memberType - Type of member

RolapMemberBase

protected RolapMemberBase()

RolapMemberBase

RolapMemberBase(RolapMember parentMember,
                RolapLevel level,
                Object value)
Method Detail

setParentMember

void setParentMember(RolapMember parentMember)
Sets a member's parent.

Can screw up the caching structure. Only to be called by CacheControl.createMoveCommand(mondrian.olap.Member, mondrian.olap.Member).

New parent must be in same level as old parent.

Parameters:
parentMember - New parent member
See Also:
getParentMember(), MemberBase.getParentUniqueName()

getLogger

protected org.apache.log4j.Logger getLogger()
Specified by:
getLogger in class OlapElementBase

getLevel

public RolapLevel getLevel()
Specified by:
getLevel in interface Member
Specified by:
getLevel in interface RolapMember
Overrides:
getLevel in class MemberBase

getHierarchy

public RolapHierarchy getHierarchy()
Specified by:
getHierarchy in interface Member
Specified by:
getHierarchy in interface OlapElement
Specified by:
getHierarchy in interface RolapMember
Overrides:
getHierarchy in class MemberBase

getParentMember

public RolapMember getParentMember()
Description copied from interface: Member
Returns this member's parent, or null (not the 'null member', as returned by Hierarchy.getNullMember()) if it has no parent.

In an access-control context, a member may have no visible parents, so use SchemaReader.getMemberParent(mondrian.olap.Member).

Specified by:
getParentMember in interface Member
Specified by:
getParentMember in interface RolapMember
Overrides:
getParentMember in class MemberBase

getAnnotationMap

public Map<String,Annotation> getAnnotationMap()
Description copied from interface: Annotated
Returns a list of annotations.

The map may be empty, never null.

Specified by:
getAnnotationMap in interface Annotated
Returns:
Map from annotation name to annotations.

hashCode

public int hashCode()
Overrides:
hashCode in class OlapElementBase

equals

public boolean equals(Object o)
Overrides:
equals in class OlapElementBase

equals

public boolean equals(OlapElement o)
Overrides:
equals in class OlapElementBase

makeUniqueName

void makeUniqueName(HierarchyUsage hierarchyUsage)

setUniqueName

protected void setUniqueName(Object key)

isCalculatedInQuery

public boolean isCalculatedInQuery()
Description copied from interface: Member
Returns whether this member is computed from a WITH MEMBER clause in an MDX query.

Specified by:
isCalculatedInQuery in interface Member
Specified by:
isCalculatedInQuery in interface RolapCalculation
Returns:
whether this calculation is computed in an MDX query

getName

public String getName()
Specified by:
getName in interface OlapElement
Specified by:
getName in class MemberBase

setName

public void setName(String name)
Description copied from interface: Member
Only allowable if the member is part of the WITH clause of a query.

Specified by:
setName in interface Member

setProperty

public void setProperty(String name,
                        Object value)
Sets a property of this member to a given value.

WARNING: Setting system properties such as "$name" may have nasty side-effects.

Specified by:
setProperty in interface Member

getPropertyValue

public Object getPropertyValue(String propertyName)
Description copied from interface: Member
Returns the value of the property named propertyName. Name match is case-sensitive.

Specified by:
getPropertyValue in interface Member

getPropertyValue

public Object getPropertyValue(String propertyName,
                               boolean matchCase)
Description copied from interface: Member
Returns the value of the property named propertyName, matching according to the required case-sensitivity.

Specified by:
getPropertyValue in interface Member

getPropertyFromMap

protected Object getPropertyFromMap(String propertyName,
                                    boolean matchCase)
Returns the value of a property by looking it up in the property map.

Parameters:
propertyName - Name of property
matchCase - Whether to match name case-sensitive
Returns:
Property value

childLevelHasApproxRowCount

protected boolean childLevelHasApproxRowCount()

isAllMember

public boolean isAllMember()
Deprecated. Use MemberBase.isAll(); will be removed in mondrian-4.0

Specified by:
isAllMember in interface RolapMember

getProperties

public Property[] getProperties()
Description copied from interface: Member
Returns the definitions of the properties this member may have.

Specified by:
getProperties in interface Member

getOrdinal

public int getOrdinal()
Description copied from class: MemberBase
Returns the ordinal of this member within its hierarchy. The default implementation returns -1.

Specified by:
getOrdinal in interface Member
Overrides:
getOrdinal in class MemberBase

getOrderKey

public Comparable getOrderKey()
Description copied from class: MemberBase
Returns the order key of this member among its siblings. The default implementation returns null.

Specified by:
getOrderKey in interface Member
Overrides:
getOrderKey in class MemberBase

setOrdinal

void setOrdinal(int ordinal)

setOrderKey

void setOrderKey(Comparable orderKey)

getKey

public Object getKey()
Specified by:
getKey in interface RolapMember

compareTo

public int compareTo(Object o)
Compares this member to another RolapMemberBase.

The method first compares on keys; null keys always collate last. If the keys are equal, it compares using unique name.

This method does not consider ordinal field, because ordinal is only unique within a parent. If you want to compare members which may be at any position in the hierarchy, use FunUtil.compareHierarchically(mondrian.olap.Member, mondrian.olap.Member, boolean).

Specified by:
compareTo in interface Comparable
Returns:
-1 if this is less, 0 if this is the same, 1 if this is greater

isHidden

public boolean isHidden()
Description copied from interface: Member
Returns whether this member is 'hidden', as per the rules which define a ragged hierarchy.

Specified by:
isHidden in interface Member
Overrides:
isHidden in class MemberBase

getDepth

public int getDepth()
Description copied from interface: Member
returns the depth of this member, which is not the level's depth in case of parent child dimensions

Specified by:
getDepth in interface Member
Returns:
depth

getPropertyFormattedValue

public String getPropertyFormattedValue(String propertyName)
Description copied from interface: Member
Returns the formatted value of the property named propertyName.

Specified by:
getPropertyFormattedValue in interface Member
Overrides:
getPropertyFormattedValue in class MemberBase

isParentChildLeaf

public boolean isParentChildLeaf()
Specified by:
isParentChildLeaf in interface Member
Overrides:
isParentChildLeaf in class MemberBase

getAllMembers

public static List<List<Member>> getAllMembers(SchemaReader schemaReader,
                                               Hierarchy hierarchy)
Returns a list of member lists where the first member list is the root members while the last member array is the leaf members.

If you know that you will need to get all or most of the members of a hierarchy, then calling this which gets all of the hierarchy's members all at once is much faster than getting members one at a time.

Parameters:
schemaReader - Schema reader
hierarchy - Hierarchy
Returns:
List of arrays of members

getHierarchyCardinality

public static int getHierarchyCardinality(SchemaReader schemaReader,
                                          Hierarchy hierarchy)

setOrdinals

public static void setOrdinals(SchemaReader schemaReader,
                               Member seedMember)
Sets member ordinal values using a Bottom-up/Top-down algorithm.

Gets an array of members for each level and traverses array for the lowest level, setting each member's parent's parent's etc. member's ordinal if not set working back down to the leaf member and then going to the next leaf member and traversing up again.

The above algorithm only works for a hierarchy that has all of its leaf members in the same level (that is, a non-ragged hierarchy), which is the norm. After all member ordinal values have been set, traverses the array of members, making sure that all members' ordinals have been set. If one is found that is not set, then one must to a full Top-down setting of the ordinals.

The Bottom-up/Top-down algorithm is MUCH faster than the Top-down algorithm.

Parameters:
schemaReader - Schema reader
seedMember - Member

keyToString

protected static String keyToString(Object key)
Converts a key to a string to be used as part of the member's name and unique name.

Usually, it just calls Object.toString(). But if the key is an integer value represented in a floating-point column, we'd prefer the integer value. For example, one member of the [Sales].[Store SQFT] dimension comes out "20319.0" but we'd like it to be "20319".


containsAggregateFunction

public boolean containsAggregateFunction()
Description copied from interface: RolapCalculation
Returns whether this calculation contains an aggregate function.

Specified by:
containsAggregateFunction in interface RolapCalculation
Returns:
Whether this calculation contains an aggregate function.

getCompiledExpression

public Calc getCompiledExpression(RolapEvaluatorRoot root)
Description copied from interface: RolapCalculation
Returns the compiled expression to evaluate the scalar value of the current cell. This method will be called frequently, so the implementation should probably compile once and cache the result.

Specified by:
getCompiledExpression in interface RolapCalculation
Parameters:
root - Root evaluation context
Returns:
Compiled scalar expression

getHierarchyOrdinal

public int getHierarchyOrdinal()
Description copied from interface: RolapCalculation
Returns the ordinal of this calculation; to resolve ties.

Specified by:
getHierarchyOrdinal in interface RolapCalculation
Returns:
Ordinal or calculation

setContextIn

public void setContextIn(RolapEvaluator evaluator)
Description copied from interface: RolapCalculation
Pushes this calculated member or tuple onto the stack of evaluation contexts, and sets the context to the default member of the hierarchy.

Specified by:
setContextIn in interface RolapCalculation
Parameters:
evaluator - Evaluator

Get Mondrian at SourceForge.net. Fast, secure and free Open Source software downloads