KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > olap > MemberBase


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/olap/MemberBase.java#32 $
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) 2001-2002 Kana Software, Inc.
7 // Copyright (C) 2001-2007 Julian Hyde and others
8 // All Rights Reserved.
9 // You must accept the terms of that agreement to use this software.
10 //
11 // jhyde, 6 August, 2001
12 */

13
14 package mondrian.olap;
15 import mondrian.resource.MondrianResource;
16
17 import java.util.List JavaDoc;
18 import java.util.ArrayList JavaDoc;
19
20 /**
21  * <code>MemberBase</code> is a partial implementation of {@link Member}.
22  *
23  * @author jhyde
24  * @since 6 August, 2001
25  * @version $Id: //open/mondrian/src/main/mondrian/olap/MemberBase.java#32 $
26  */

27 public abstract class MemberBase
28     extends OlapElementBase
29     implements Member {
30
31     protected Member parentMember;
32     protected final Level level;
33     protected String JavaDoc uniqueName;
34
35     /**
36      * Combines member type and whether is hidden.
37      *
38      * <p>The lowest 3 bits are member type;
39      * bit 4 is set if the member is hidden.
40      */

41     protected final int flags;
42     protected final String JavaDoc parentUniqueName;
43
44     protected MemberBase(
45         Member parentMember,
46         Level level,
47         MemberType memberType)
48     {
49         this.parentMember = parentMember;
50         this.level = level;
51         this.parentUniqueName = (parentMember == null)
52             ? null
53             : parentMember.getUniqueName();
54         this.flags = memberType.ordinal();
55     }
56
57     public String JavaDoc getQualifiedName() {
58         return MondrianResource.instance().MdxMemberName.str(uniqueName);
59     }
60
61     public abstract String JavaDoc getName();
62
63     public final String JavaDoc getUniqueName() {
64         return uniqueName;
65     }
66
67     public final String JavaDoc getCaption() {
68         // if there is a member formatter for the members level,
69
// we will call this interface to provide the display string
70
MemberFormatter mf = getLevel().getMemberFormatter();
71         if (mf != null) {
72             return mf.formatMember(this);
73         }
74         final String JavaDoc caption = super.getCaption();
75         return (caption != null)
76             ? caption
77             : getName();
78     }
79
80     public final String JavaDoc getParentUniqueName() {
81         return parentUniqueName;
82     }
83
84     public Dimension getDimension() {
85         return level.getDimension();
86     }
87
88     public Hierarchy getHierarchy() {
89         return level.getHierarchy();
90     }
91
92     public Level getLevel() {
93         return level;
94     }
95
96     public final MemberType getMemberType() {
97         return MemberType.values()[flags & 7];
98     }
99
100     public String JavaDoc getDescription() {
101         return null;
102     }
103
104     public final boolean isMeasure() {
105         return level.getHierarchy().getDimension().isMeasures();
106     }
107
108     public final boolean isAll() {
109         return level.isAll();
110     }
111
112     public boolean isNull() {
113         return false;
114     }
115
116     public OlapElement lookupChild(SchemaReader schemaReader, String JavaDoc s) {
117         return lookupChild(schemaReader, s, MatchType.EXACT);
118     }
119
120     public OlapElement lookupChild(
121         SchemaReader schemaReader, String JavaDoc s, MatchType matchType)
122     {
123         return schemaReader.lookupMemberChildByName(this, s, matchType);
124     }
125
126     // implement Member
127
public Member getParentMember() {
128         // use the cache if possible (getAdoMember can be very expensive)
129
if (parentUniqueName == null) {
130             return null; // we are root member, which has no parent
131
} else if (parentMember != null) {
132             return parentMember;
133         } else {
134             boolean failIfNotFound = true;
135             final Hierarchy hierarchy = getHierarchy();
136             final SchemaReader schemaReader =
137                 hierarchy.getDimension().getSchema().getSchemaReader();
138             String JavaDoc[] parentUniqueNameParts = Util.explode(parentUniqueName);
139             parentMember = schemaReader.getMemberByUniqueName(
140                     parentUniqueNameParts, failIfNotFound);
141             return parentMember;
142         }
143     }
144
145     // implement Member
146
public boolean isChildOrEqualTo(Member member) {
147         return (member != null) && isChildOrEqualTo(member.getUniqueName());
148     }
149
150    /**
151     * Returns whether this <code>Member</code>'s unique name is equal to, a
152     * child of, or a descendent of a member whose unique name is
153     * <code>uniqueName</code>.
154     */

155     public boolean isChildOrEqualTo(String JavaDoc uniqueName) {
156         if (uniqueName == null) {
157             return false;
158         }
159
160         // The mapping member uniqueName --> parent uniqueName is more
161
// efficient than using getAdoMember().
162
String JavaDoc thisUniqueName = getUniqueName();
163         if (thisUniqueName.equals(uniqueName)) {
164             //found a match
165
return true;
166         }
167         String JavaDoc parentUniqueName = getParentUniqueName();
168         return (parentUniqueName == null)
169             // have reached root
170
? false
171             // try candidate's parentMember
172
: ((MemberBase) getParentMember()).isChildOrEqualTo(uniqueName);
173     }
174
175     // implement Member
176
public boolean isCalculated() {
177         return isCalculatedInQuery() || getMemberType() == MemberType.FORMULA;
178     }
179
180     public int getSolveOrder() {
181         return -1;
182     }
183
184     /**
185      * Returns the expression by which this member is calculated. The expression
186      * is not null if and only if the member is not calculated.
187      *
188      * @post (return != null) == (isCalculated())
189      */

190     public Exp getExpression() {
191         return null;
192     }
193
194     // implement Member
195
public Member[] getAncestorMembers() {
196         List JavaDoc<Member> list = new ArrayList JavaDoc<Member>();
197         Member parentMember = getParentMember();
198         while (parentMember != null) {
199             list.add(parentMember);
200             parentMember = parentMember.getParentMember();
201         }
202         return list.toArray(new Member[list.size()]);
203     }
204
205     /**
206      * Returns the ordinal of this member within its hierarchy.
207      * The default implementation returns -1.
208      */

209     public int getOrdinal() {
210         return -1;
211     }
212
213     /**
214      * Returns the order key of this member among its siblings.
215      * The default implementation returns null.
216      */

217     public Comparable JavaDoc getOrderKey() {
218         return null;
219     }
220     
221     public boolean isHidden() {
222         return false;
223     }
224
225     public Member getDataMember() {
226         return null;
227     }
228
229     public String JavaDoc getPropertyFormattedValue(String JavaDoc propertyName){
230         return getPropertyValue(propertyName).toString();
231     }
232 }
233
234 // End MemberBase.java
235
Popular Tags