001/*
002// This software is subject to the terms of the Eclipse Public License v1.0
003// Agreement, available at the following URL:
004// http://www.eclipse.org/legal/epl-v10.html.
005// You must accept the terms of that agreement to use this software.
006//
007// Copyright (C) 2003-2005 Julian Hyde
008// Copyright (C) 2004-2005 TONBELLER AG
009// Copyright (C) 2005-2012 Pentaho
010// All Rights Reserved.
011*/
012package mondrian.olap;
013
014import mondrian.calc.Calc;
015import mondrian.rolap.RolapSchema;
016import mondrian.rolap.RolapUtil;
017
018import java.util.List;
019import java.util.Map;
020
021import javax.sql.DataSource;
022
023/**
024 * <code>DelegatingSchemaReader</code> implements {@link SchemaReader} by
025 * delegating all methods to an underlying {@link SchemaReader}.
026 *
027 * <p>It is a convenient base class if you want to override just a few of
028 * {@link SchemaReader}'s methods.</p>
029 *
030 * @author jhyde
031 * @since Feb 26, 2003
032 */
033public abstract class DelegatingSchemaReader implements SchemaReader {
034    protected final SchemaReader schemaReader;
035
036    /**
037     * Creates a DelegatingSchemaReader.
038     *
039     * @param schemaReader Parent reader to delegate unhandled calls to
040     */
041    protected DelegatingSchemaReader(SchemaReader schemaReader) {
042        this.schemaReader = schemaReader;
043    }
044
045    public RolapSchema getSchema() {
046        return schemaReader.getSchema();
047    }
048
049    public Role getRole() {
050        return schemaReader.getRole();
051    }
052
053    public Cube getCube() {
054        return schemaReader.getCube();
055    }
056
057    public List<Dimension> getCubeDimensions(Cube cube) {
058        return schemaReader.getCubeDimensions(cube);
059    }
060
061    public List<Hierarchy> getDimensionHierarchies(Dimension dimension) {
062        return schemaReader.getDimensionHierarchies(dimension);
063    }
064
065    public List<Member> getHierarchyRootMembers(Hierarchy hierarchy) {
066        return schemaReader.getHierarchyRootMembers(hierarchy);
067    }
068
069    public Member getMemberParent(Member member) {
070        return schemaReader.getMemberParent(member);
071    }
072
073    public Member substitute(Member member) {
074        return schemaReader.substitute(member);
075    }
076
077    public List<Member> getMemberChildren(Member member) {
078        return schemaReader.getMemberChildren(member);
079    }
080
081    public List<Member> getMemberChildren(List<Member> members) {
082        return schemaReader.getMemberChildren(members);
083    }
084
085    public void getParentChildContributingChildren(
086        Member dataMember, Hierarchy hierarchy, List<Member> list)
087    {
088        schemaReader.getParentChildContributingChildren(
089            dataMember, hierarchy, list);
090    }
091
092    public int getMemberDepth(Member member) {
093        return schemaReader.getMemberDepth(member);
094    }
095
096    public final Member getMemberByUniqueName(
097        List<Id.Segment> uniqueNameParts,
098        boolean failIfNotFound)
099    {
100        return getMemberByUniqueName(
101            uniqueNameParts, failIfNotFound, MatchType.EXACT);
102    }
103
104    public Member getMemberByUniqueName(
105        List<Id.Segment> uniqueNameParts,
106        boolean failIfNotFound,
107        MatchType matchType)
108    {
109        return schemaReader.getMemberByUniqueName(
110            uniqueNameParts, failIfNotFound, matchType);
111    }
112
113    public final OlapElement lookupCompound(
114        OlapElement parent, List<Id.Segment> names,
115        boolean failIfNotFound, int category)
116    {
117        return lookupCompound(
118            parent, names, failIfNotFound, category, MatchType.EXACT);
119    }
120
121    public final OlapElement lookupCompound(
122        OlapElement parent,
123        List<Id.Segment> names,
124        boolean failIfNotFound,
125        int category,
126        MatchType matchType)
127    {
128        if (MondrianProperties.instance().SsasCompatibleNaming.get()) {
129            return new NameResolver().resolve(
130                parent,
131                Util.toOlap4j(names),
132                failIfNotFound,
133                category,
134                matchType,
135                getNamespaces());
136        }
137        return lookupCompoundInternal(
138            parent,
139            names,
140            failIfNotFound,
141            category,
142            matchType);
143    }
144
145    public List<NameResolver.Namespace> getNamespaces() {
146        return schemaReader.getNamespaces();
147    }
148
149    public OlapElement lookupCompoundInternal(
150        OlapElement parent, List<Id.Segment> names,
151        boolean failIfNotFound, int category, MatchType matchType)
152    {
153        return schemaReader.lookupCompound(
154            parent, names, failIfNotFound, category, matchType);
155    }
156
157    public Member getCalculatedMember(List<Id.Segment> nameParts) {
158        return schemaReader.getCalculatedMember(nameParts);
159    }
160
161    public NamedSet getNamedSet(List<Id.Segment> nameParts) {
162        return schemaReader.getNamedSet(nameParts);
163    }
164
165    public void getMemberRange(
166        Level level,
167        Member startMember,
168        Member endMember,
169        List<Member> list)
170    {
171        schemaReader.getMemberRange(level, startMember, endMember, list);
172    }
173
174    public Member getLeadMember(Member member, int n) {
175        return schemaReader.getLeadMember(member, n);
176    }
177
178    public int compareMembersHierarchically(Member m1, Member m2) {
179        return schemaReader.compareMembersHierarchically(m1, m2);
180    }
181
182    public OlapElement getElementChild(OlapElement parent, Id.Segment name) {
183        return getElementChild(parent, name, MatchType.EXACT);
184    }
185
186    public OlapElement getElementChild(
187        OlapElement parent, Id.Segment name, MatchType matchType)
188    {
189        return schemaReader.getElementChild(parent, name, matchType);
190    }
191
192    public List<Member> getLevelMembers(
193        Level level, boolean includeCalculated)
194    {
195        return schemaReader.getLevelMembers(level, includeCalculated);
196    }
197
198    public List<Level> getHierarchyLevels(Hierarchy hierarchy) {
199        return schemaReader.getHierarchyLevels(hierarchy);
200    }
201
202    public Member getHierarchyDefaultMember(Hierarchy hierarchy) {
203        return schemaReader.getHierarchyDefaultMember(hierarchy);
204    }
205
206    public boolean isDrillable(Member member) {
207        return schemaReader.isDrillable(member);
208    }
209
210    public boolean isVisible(Member member) {
211        return schemaReader.isVisible(member);
212    }
213
214    public Cube[] getCubes() {
215        return schemaReader.getCubes();
216    }
217
218    public List<Member> getCalculatedMembers(Hierarchy hierarchy) {
219        return schemaReader.getCalculatedMembers(hierarchy);
220    }
221
222    public List<Member> getCalculatedMembers(Level level) {
223        return schemaReader.getCalculatedMembers(level);
224    }
225
226    public List<Member> getCalculatedMembers() {
227        return schemaReader.getCalculatedMembers();
228    }
229
230    public int getChildrenCountFromCache(Member member) {
231        return schemaReader.getChildrenCountFromCache(member);
232    }
233
234    public int getLevelCardinality(
235        Level level, boolean approximate, boolean materialize)
236    {
237        return schemaReader.getLevelCardinality(
238            level, approximate, materialize);
239    }
240
241    public List<Member> getLevelMembers(Level level, Evaluator context) {
242        return schemaReader.getLevelMembers(level, context);
243    }
244
245    public List<Member> getMemberChildren(Member member, Evaluator context) {
246        return schemaReader.getMemberChildren(member, context);
247    }
248
249    public List<Member> getMemberChildren(
250        List<Member> members, Evaluator context)
251    {
252        return schemaReader.getMemberChildren(members, context);
253    }
254
255    public void getMemberAncestors(Member member, List<Member> ancestorList) {
256        schemaReader.getMemberAncestors(member, ancestorList);
257    }
258
259    public Member lookupMemberChildByName(
260        Member member, Id.Segment memberName, MatchType matchType)
261    {
262        return schemaReader.lookupMemberChildByName(
263            member, memberName, matchType);
264    }
265
266    public NativeEvaluator getNativeSetEvaluator(
267        FunDef fun, Exp[] args, Evaluator evaluator, Calc calc)
268    {
269        return schemaReader.getNativeSetEvaluator(fun, args, evaluator, calc);
270    }
271
272    public Parameter getParameter(String name) {
273        return schemaReader.getParameter(name);
274    }
275
276    public DataSource getDataSource() {
277        return schemaReader.getDataSource();
278    }
279
280    public SchemaReader withoutAccessControl() {
281        return schemaReader.withoutAccessControl();
282    }
283
284    public SchemaReader withLocus() {
285        return RolapUtil.locusSchemaReader(
286            schemaReader.getSchema().getInternalConnection(),
287            this);
288    }
289
290    public Map<? extends Member, Access> getMemberChildrenWithDetails(
291        Member member,
292        Evaluator evaluator)
293    {
294        return schemaReader.getMemberChildrenWithDetails(member, evaluator);
295    }
296}
297
298// End DelegatingSchemaReader.java