Skip to content

Commit

Permalink
MONDRIAN: Allow various SPIs (UserDefinedFunction, MemberFormatter,
Browse files Browse the repository at this point in the history
    CellFormatter, PropertyFormatter) to be implemented using a script.
    Preferred syntax for these SPIs is now a nested element, e.g.
    <MemberFormatter>, that can either have a className attribute or a nested
    <Script> element.

    Move various SPIs from mondrian.olap to mondrian.spi package. Old
    interfaces will exist, deprecated, until mondrian-4.0.

    Fix some JDK 1.4 problems.

[git-p4: depot-paths = "//open/mondrian/": change = 14335]
  • Loading branch information
julianhyde committed May 30, 2011
1 parent a45628f commit 9cdce04
Show file tree
Hide file tree
Showing 44 changed files with 1,866 additions and 387 deletions.
5 changes: 5 additions & 0 deletions build.xml
Expand Up @@ -529,6 +529,7 @@ compile.java"/>
<include name="mondrian/**/*.java"/>
<exclude name="mondrian/olap4j/FactoryJdbc3Impl.java" if="jdk16.present"/>
<exclude name="mondrian/olap4j/FactoryJdbc4Impl.java" if="jdk16.not.present"/>
<exclude name="mondrian/util/UtilCompatibleJdk16.java" if="jdk16.not.present"/>
</javac>
<copy file="src/main/mondrian/rolap/aggmatcher/DefaultRules.xml"
todir="${classes.dir}"/>
Expand Down Expand Up @@ -1427,6 +1428,10 @@ diagrams and hyperlinks to source code">
<!-- ignore: FactoryJdbc4Impl is only built in JDK1.6 -->
<linecontains negate="true">
<contains value="FactoryJdbc4Impl.java"/>
</linecontains>
<!-- ignore: UtilCompatibleJdk16 is only built in JDK1.6 -->
<linecontains negate="true">
<contains value="UtilCompatibleJdk16.java"/>
</linecontains>
<striplinebreaks />
</filterchain>
Expand Down
19 changes: 10 additions & 9 deletions doc/schema.html
Expand Up @@ -5,9 +5,10 @@
== Agreement, available at the following URL:
== http://www.eclipse.org/legal/epl-v10.html.
== Copyright (C) 2001-2002 Kana Software, Inc.
== Copyright (C) 2002-2009 Julian Hyde
== Copyright (C) 2002-2011 Julian Hyde
== All Rights Reserved.
== You must accept the terms of that agreement to use this software.
==
== jhyde, 24 September, 2002
-->
<head>
Expand Down Expand Up @@ -2350,8 +2351,8 @@ <h1>6.4 Cell formatter<a name="Cell_formatter">&nbsp;</a></h1>
<p>A cell formatter modifies the behavior of <code>
<a href="api/mondrian/olap/Cell.html#getFormattedValue%28%29">
Cell.getFormattedValue()</a></code>. The class must implement the <code>
<a href="api/mondrian/olap/CellFormatter.html">
mondrian.olap.CellFormatter</a></code> interface, and is specified like this:</p>
<a href="api/mondrian/spi/CellFormatter.html">
mondrian.spi.CellFormatter</a></code> interface, and is specified like this:</p>

<blockquote style="text-indent: -20px">
<code>
Expand Down Expand Up @@ -2396,8 +2397,8 @@ <h1>6.5 Member formatter<a name="Member_formatter">&nbsp;</a></h1>
<p>A member formatter modifies the behavior of <code>
<a href="api/mondrian/olap/Member.html#getCaption%28%29">
Member.getCaption()</a></code>. The class must implement the <code>
<a href="api/mondrian/olap/MemberFormatter.html">
mondrian.olap.MemberFormatter</a></code> interface, and is specified like this:</p>
<a href="api/mondrian/spi/MemberFormatter.html">
mondrian.spi.MemberFormatter</a></code> interface, and is specified like this:</p>

<blockquote>
<code>&lt;<a href="#XML_Level">Level</a> column="column" name="name" formatter="com.acme.MyMemberFormatter"/&gt;</code>
Expand All @@ -2411,8 +2412,8 @@ <h1>6.6 Property formatter<a name="Property_formatter">&nbsp;</a></h1>
<p>A property formatter modifies the behavior of <code>
<a href="api/mondrian/olap/Member.html#getPropertyFormattedValue%28java.lang.String%29">
Property.getPropertyFormattedValue()</a></code>. The class must implement the<code>
<a href="api/mondrian/olap/PropertyFormatter.html">
mondrian.olap.PropertyFormatter</a></code> interface, and is specified like this:</p>
<a href="api/mondrian/spi/PropertyFormatter.html">
mondrian.spi.PropertyFormatter</a></code> interface, and is specified like this:</p>

<blockquote style="text-indent: -20px">
<code>
Expand Down Expand Up @@ -3379,11 +3380,11 @@ <h3>10. Appendix A: XML elements<a name="Appendix_A_XML_elements">&nbsp;</a></h3
<br />
<br />

<p>Author: Julian Hyde; last modified December 2009.<br/>
<p>Author: Julian Hyde; last modified May 2011.<br/>
Version: $Id$
(<a href="http://p4web.eigenbase.org/open/mondrian/doc/schema.html?ac=22">log</a>)<br/>
Copyright (C) 2001-2002 Kana Software, Inc..<br/>
Copyright (C) 2002-2009 Julian Hyde and others
Copyright (C) 2002-2011 Julian Hyde and others
</p>

<br />
Expand Down
6 changes: 3 additions & 3 deletions src/main/mondrian/gui/resources/workbenchInfo.properties
Expand Up @@ -50,20 +50,20 @@ Level,uniqueMembers=<HTML>Whether members are unique across all parents. For<BR>
Level,levelType=<HTML>Whether this is a regular or a time-related level.<BR>The value makes a difference to time-related functions such as YTD (year-to-date).</HTML>
Level,hideMemberIf=<HTML>Condition which determines whether a member of this level<BR>is hidden. If a hierarchy has one or more levels with hidden<BR>members, then it is possible that not all leaf members are the<BR>same distance from the root, and it is termed a ragged hierarchy.</HTML>
Level,closure=Specifies the transitive closure of a parent-child hierarchy.
Level,formatter=<HTML>Name of a formatter class for the member labels being displayed.<BR>The class must implement the mondrian.olap.MemberFormatter interface.</HTML>
Level,formatter=<HTML>Name of a formatter class for the member labels being displayed.<BR>The class must implement the mondrian.spi.MemberFormatter interface.</HTML>
Level,caption=<HTML>A string being displayed instead of the level's name.<BR>Can be localized from Properties file using #{propertyname}.</HTML>
Level,captionColumn=The name of the column which holds the caption for members.
Property,name=Name of this property.
Property,column=column name
Property,type=Data type of this property
Property,formatter=<HTML>Name of a formatter class for the appropriate property value<BR>being displayed. The class must implement the mondrian.olap.PropertyFormatter<BR>interface.</HTML>
Property,formatter=<HTML>Name of a formatter class for the appropriate property value<BR>being displayed. The class must implement the mondrian.spi.PropertyFormatter<BR>interface.</HTML>
Property,caption=<HTML>A string being displayed instead of the name.<BR>Can be localized from Properties file using #{propertyname}.</HTML>
Measure,name=Name of this measure.
Measure,column=<HTML>Column which is source of this measure's values.<BR>If not specified, a measure expression must be specified.</HTML>
Measure,datatype=<HTML>The datatype of this measure.<BR>Valid values are 'String', 'Numeric' and 'Integer'.<BR>The default datatype of a measure is<BR>'Integer' if the measure's aggregator is 'Count',<BR>otherwise it is 'Numeric'.</HTML>
Measure,formatString=<HTML>Format string with which to format cells of this measure.<BR> Formats numbers, strings and dates according to the<BR> same specification as Visual Basic's format() function.</HTML>
Measure,aggregator=Aggregation function.
Measure,formatter=<HTML>Name of a formatter class for the appropriate cell being displayed.<BR>The class must implement the mondrian.olap.CellFormatter interface.</HTML>
Measure,formatter=<HTML>Name of a formatter class for the appropriate cell being displayed.<BR>The class must implement the mondrian.spi.CellFormatter interface.</HTML>
Measure,caption=<HTML>A string being displayed instead of the name.<BR>Can be localized from Properties file using #{propertyname}.</HTML>
Measure,visible=Whether this member is visible in the user-interface. Default true.
CalculatedMember,name=Name of this calculated member.
Expand Down
8 changes: 4 additions & 4 deletions src/main/mondrian/gui/resources/workbenchInfo_ja.properties
Expand Up @@ -50,20 +50,20 @@ Level,uniqueMembers=<HTML>\u3059\u3079\u3066\u306e\u89aa\u306b\u6e21\u3063\u3066
Level,levelType=<HTML>regular\u304bTime\u95a2\u9023\u30ec\u30d9\u30eb\u304b\u3092\u9078\u629e\u3057\u307e\u3059\u3002<BR>YTD (year-to-date)\u306e\u3088\u3046\u306b\u3053\u306e\u30d0\u30ea\u30e5\u30fc\u304c\u9055\u3044\u3092\u4f5c\u308a\u307e\u3059\u3002</HTML>
Level,hideMemberIf=<HTML>\u3053\u306e\u30ec\u30d9\u30eb\u306e\u30e1\u30f3\u30d0\u30fc\u3092\u96a0\u3059\u304b\u3069\u3046\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u6761\u4ef6\u3002<BR>\u3082\u3057\u30d2\u30a8\u30e9\u30eb\u30ad\u30fc\u304c1\u3064\u4ee5\u4e0a\u306e\u96a0\u308c\u305f\u30e1\u30f3\u30d0\u30fc\u3092\u6301\u3063\u3066\u3044\u305f\u3089\u3001<BR>\u5fc5\u305a\u3057\u3082\u3059\u3079\u3066\u306eleaf\u30e1\u30f3\u30d0\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002</HTML>
Level,closure=\u89aa\u5b50\u30d2\u30a8\u30e9\u30eb\u30ad\u30fc\u306e\u7d42\u7d50\u3092\u7279\u5b9a\u3059\u308b\u3002
Level,formatter=<HTML>\u8868\u793a\u3055\u308c\u308b\u30e1\u30f3\u30d0\u30fc\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u540d\u3002<BR>mondrian.olap.MemberFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u5b9f\u884c\u304c\u5fc5\u8981</HTML>
Level,formatter=<HTML>\u8868\u793a\u3055\u308c\u308b\u30e1\u30f3\u30d0\u30fc\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u540d\u3002<BR>mondrian.spi.MemberFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u5b9f\u884c\u304c\u5fc5\u8981</HTML>
Level,caption=<HTML>\u30ec\u30d9\u30eb\u540d\u306e\u4ee3\u308f\u308a\u306b\u8868\u793a\u3055\u308c\u308b\u6587\u5b57\u5217\u3002<BR> #{propertyname}\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3002</HTML>
Level,captionColumn=\u30e1\u30f3\u30d0\u30fc\u306e\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u3092\u4fdd\u6301\u3059\u308b\u30ab\u30e9\u30e0\u306e\u540d\u524d\u3002
Property,name=\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u540d\u524d
Property,column=\u30ab\u30e9\u30e0\u540d
Property,type=\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7
Property,formatter=<HTML>\u9069\u5207\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u30d0\u30ea\u30e5\u30fc\u306b\u5bfe\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u306e\u540d\u524d\u3002<BR>mondrian.olap.PropertyFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u304c\u5fc5\u8981\u3002</HTML>
Property,formatter=<HTML>\u9069\u5207\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u30d0\u30ea\u30e5\u30fc\u306b\u5bfe\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u306e\u540d\u524d\u3002<BR>mondrian.spi.PropertyFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u304c\u5fc5\u8981\u3002</HTML>
Property,caption=<HTML>\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\u306e\u4ee3\u308f\u308a\u306b\u8868\u793a\u3055\u308c\u308b\u6587\u5b57\u5217\u3002<BR> #{propertyname}\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3002</HTML>
Measure,name=\u3053\u306e\u30e1\u30b8\u30e3\u30fc\u306e\u540d\u524d
Measure,column=<HTML>\u3053\u306e\u30e1\u30b8\u30e3\u30fc\u306e\u540d\u524d\u306e\u57fa\u306b\u306a\u308b\u30ab\u30e9\u30e0\u3002<BR>\u7279\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30e1\u30b8\u30e3\u30fc\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002</HTML>
Measure,datatype=<HTML>\u3053\u306e\u30e1\u30b8\u30e3\u30fc\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7\u3002<BR>\u6709\u52b9\u306a\u30d0\u30ea\u30e5\u30fc\u306f 'String', 'Numeric', 'Integer'<BR>\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7---><BR>\u3082\u3057\u30e1\u30b8\u30e3\u30fc\u304c 'Count'\u306e\u5834\u5408\u3001'Integer' <BR>\u305d\u308c\u3067\u306a\u3051\u308c\u3070'Numeric'</HTML>
Measure,formatString=<HTML>\u3053\u306e\u30e1\u30b8\u30e3\u30fc\u306e\u30bb\u30eb\u306e\u6587\u5b57\u5217\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3002<BR>numbers\u3084strings\u3084dates\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f<BR>Visual Basic's \u30d5\u30a9\u30fc\u30de\u30c3\u30c8() \u95a2\u6570\u3068\u540c\u3058\u3067\u3059\u3002</HTML>
Measure,aggregator=\u30a2\u30b0\u30ea\u30b2\u30fc\u30b7\u30e7\u30f3\u95a2\u6570
Measure,formatter=<HTML>\u8868\u793a\u3055\u308c\u308b\u9069\u5207\u306a\u30bb\u30eb\u306b\u5bfe\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u306e\u540d\u524d\u3002<BR>mondrian.olap.CellFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u304c\u5fc5\u8981\u3002</HTML>
Measure,formatter=<HTML>\u8868\u793a\u3055\u308c\u308b\u9069\u5207\u306a\u30bb\u30eb\u306b\u5bfe\u3059\u308b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30af\u30e9\u30b9\u306e\u540d\u524d\u3002<BR>mondrian.spi.CellFormatter\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u304c\u5fc5\u8981\u3002</HTML>
Measure,caption=<HTML>\u30e1\u30b8\u30e3\u30fc\u306e\u4ee3\u308f\u308a\u306b\u8868\u793a\u3055\u308c\u308b\u540d\u524d\u3002<BR> #{propertyname}\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3002</HTML>
Measure,visible=\u3053\u306e\u30e1\u30f3\u30d0\u30fc\u304c\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067visible\u304b\u3069\u3046\u304b\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fTrue\u3002
CalculatedMember,name=\u8a08\u7b97\u3055\u308c\u305f\u30e1\u30f3\u30d0\u30fc\u306e\u540d\u524d
Expand Down Expand Up @@ -121,4 +121,4 @@ Parameter,modifiable=<HTML>\u3082\u3057false\u306a\u3089\u3001\u30b9\u30c6\u30fc
Parameter,defaultValue=\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d0\u30ea\u30e5\u30fc\u306b\u5bfe\u3059\u308bExpression\u3002
Role,name=\u3053\u306e\u30ed\u30fc\u30eb\u306e\u540d\u524d
SchemaGrant,access=\u3053\u306e\u30b9\u30ad\u30fc\u30de\u3078\u306e\u3053\u306e\u30ed\u30fc\u30eb\u306b\u3088\u308b\u30a2\u30af\u30bb\u30b9\u3092\u8a8d\u53ef\u3059\u308b\u3002
CubeGrant,access=\u3053\u306e\u30ad\u30e5\u30fc\u30d6\u3078\u306e\u3053\u306e\u30ed\u30fc\u30eb\u306b\u3088\u308b\u30a2\u30af\u30bb\u30b9\u3092\u8a8d\u53ef\u3059\u308b\u3002
CubeGrant,access=\u3053\u306e\u30ad\u30e5\u30fc\u30d6\u3078\u306e\u3053\u306e\u30ed\u30fc\u30eb\u306b\u3088\u308b\u30a2\u30af\u30bb\u30b9\u3092\u8a8d\u53ef\u3059\u308b\u3002
30 changes: 9 additions & 21 deletions src/main/mondrian/olap/CellFormatter.java
Expand Up @@ -4,34 +4,22 @@
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// Copyright (C) 2004-2005 TONBELLER AG
// Copyright (C) 2006-2009 Julian Hyde and others
// Copyright (C) 2006-2011 Julian Hyde and others
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
*/
package mondrian.olap;

/**
* This interface provides a user exit to format
* the cell value to be displayed. The user registers the CellFormatter's
* full class name as an attribute of a Measure in the schema file.
* A single instance of the CellFormatter is created for the Measure.
* <p>
* It is important that different CellFormatter's, CellFormatter that will
* be used to format different Measures in different ways, implement
* the <code>equals</code> and <code>hashCode</code> methods so that
* the different CellFormatter are not treated as being the same in
* a java.util.Collection.
* An SPI to format the cell value to be displayed.
*
* @deprecated Use {@link mondrian.spi.CellFormatter}. This interface
* exists for temporary backwards compatibility and will be removed
* in mondrian-4.0.
*
* @version $Id$
*/
public interface CellFormatter {

/**
* user provided cell formatting function
* @param value
* @return the formatted value
*/
String formatCell(Object value);

public interface CellFormatter extends mondrian.spi.CellFormatter {
}

// End CellFormatter.java

23 changes: 19 additions & 4 deletions src/main/mondrian/olap/Formula.java
Expand Up @@ -131,12 +131,27 @@ void accept(Validator validator) {
mdxMember.setProperty(Property.FORMAT_EXP.name, formatExp);
}

final List<MemberProperty> memberPropertyList =
new ArrayList<MemberProperty>(Arrays.asList(memberProperties));

// put CELL_FORMATTER_SCRIPT_LANGUAGE first, if it exists; we must
// see it before CELL_FORMATTER_SCRIPT.
for (int i = 0; i < memberPropertyList.size(); i++) {
MemberProperty memberProperty = memberPropertyList.get(i);
if (memberProperty.getName().equals(
Property.CELL_FORMATTER_SCRIPT_LANGUAGE.name))
{
memberPropertyList.remove(i);
memberPropertyList.add(0, memberProperty);
}
}

// For each property of the formula, make it a property of the
// member.
final List formatPropertyList =
Arrays.asList(Property.FORMAT_PROPERTIES);
for (MemberProperty memberProperty : memberProperties) {
if (formatPropertyList.contains(memberProperty.getName())) {
for (MemberProperty memberProperty : memberPropertyList) {
if (Property.FORMAT_PROPERTIES.contains(
memberProperty.getName()))
{
continue; // we already dealt with format_string props
}
final Exp exp = memberProperty.getExp();
Expand Down
8 changes: 4 additions & 4 deletions src/main/mondrian/olap/Level.java
Expand Up @@ -4,16 +4,15 @@
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// Copyright (C) 1999-2002 Kana Software, Inc.
// Copyright (C) 2001-2006 Julian Hyde and others
// Copyright (C) 2001-2011 Julian Hyde and others
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
// jhyde, 1 March, 1999
*/

package mondrian.olap;

import java.util.Map;
import mondrian.spi.MemberFormatter;

/**
* A <code>Level</code> is a group of {@link Member}s in a {@link Hierarchy},
Expand Down Expand Up @@ -46,7 +45,8 @@ public interface Level extends OlapElement, Annotated {
/** Returns properties defined against this level and parent levels. */
Property[] getInheritedProperties();

/** @return the MemberFormatter
/**
* Returns the object that is used to format members of this level.
*/
MemberFormatter getMemberFormatter();

Expand Down
9 changes: 3 additions & 6 deletions src/main/mondrian/olap/LevelBase.java
Expand Up @@ -4,19 +4,19 @@
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// Copyright (C) 2001-2002 Kana Software, Inc.
// Copyright (C) 2001-2009 Julian Hyde and others
// Copyright (C) 2001-2011 Julian Hyde and others
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
// jhyde, 6 August, 2001
*/

package mondrian.olap;

import mondrian.resource.MondrianResource;
import mondrian.spi.MemberFormatter;

/**
* Skeleton implementation of {@link Level}
* Skeleton implementation of {@link Level}.
*
* @author jhyde
* @since 6 August, 2001
Expand Down Expand Up @@ -124,9 +124,6 @@ public OlapElement lookupChild(
: null;
}

/**
* Returns the object which is used to format members of this level.
*/
public MemberFormatter getMemberFormatter() {
return memberFormatter;
}
Expand Down
5 changes: 3 additions & 2 deletions src/main/mondrian/olap/MemberBase.java
Expand Up @@ -4,15 +4,16 @@
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// Copyright (C) 2001-2002 Kana Software, Inc.
// Copyright (C) 2001-2010 Julian Hyde and others
// Copyright (C) 2001-2011 Julian Hyde and others
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
// jhyde, 6 August, 2001
*/

package mondrian.olap;

import mondrian.resource.MondrianResource;
import mondrian.spi.MemberFormatter;
import mondrian.util.Bug;

import java.util.List;
Expand Down

0 comments on commit 9cdce04

Please sign in to comment.