001    /*
002    // $Id: //open/mondrian-release/3.0/src/main/mondrian/olap4j/MondrianOlap4jHierarchy.java#3 $
003    // This software is subject to the terms of the Common Public License
004    // Agreement, available at the following URL:
005    // http://www.opensource.org/licenses/cpl.html.
006    // Copyright (C) 2007-2007 Julian Hyde
007    // All Rights Reserved.
008    // You must accept the terms of that agreement to use this software.
009    */
010    package mondrian.olap4j;
011    
012    import org.olap4j.metadata.*;
013    import org.olap4j.impl.*;
014    
015    import java.util.*;
016    
017    /**
018     * Implementation of {@link org.olap4j.metadata.Hierarchy}
019     * for the Mondrian OLAP engine.
020     *
021     * @author jhyde
022     * @version $Id: //open/mondrian-release/3.0/src/main/mondrian/olap4j/MondrianOlap4jHierarchy.java#3 $
023     * @since May 25, 2007
024     */
025    class MondrianOlap4jHierarchy implements Hierarchy, Named {
026        private final MondrianOlap4jSchema olap4jSchema;
027        private final mondrian.olap.Hierarchy hierarchy;
028    
029        MondrianOlap4jHierarchy(
030            MondrianOlap4jSchema olap4jSchema,
031            mondrian.olap.Hierarchy hierarchy)
032        {
033            this.olap4jSchema = olap4jSchema;
034            this.hierarchy = hierarchy;
035        }
036    
037        public boolean equals(Object obj) {
038            return obj instanceof MondrianOlap4jHierarchy &&
039                hierarchy.equals(((MondrianOlap4jHierarchy) obj).hierarchy);
040        }
041    
042        public int hashCode() {
043            return hierarchy.hashCode();
044        }
045    
046        public Dimension getDimension() {
047            return new MondrianOlap4jDimension(
048                olap4jSchema, hierarchy.getDimension());
049        }
050    
051        public NamedList<Level> getLevels() {
052            final NamedList<MondrianOlap4jLevel> list =
053                new NamedListImpl<MondrianOlap4jLevel>();
054            final MondrianOlap4jConnection olap4jConnection =
055                olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
056            for (mondrian.olap.Level level : hierarchy.getLevels()) {
057                list.add(olap4jConnection.toOlap4j(level));
058            }
059            return Olap4jUtil.cast(list);
060        }
061    
062        public boolean hasAll() {
063            return hierarchy.hasAll();
064        }
065    
066        public Member getDefaultMember() {
067            final MondrianOlap4jConnection olap4jConnection =
068                olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
069            return olap4jConnection.toOlap4j(hierarchy.getDefaultMember());
070        }
071    
072        public NamedList<Member> getRootMembers() {
073            final MondrianOlap4jConnection olap4jConnection =
074                olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
075            final mondrian.olap.Member[] levelMembers =
076                olap4jConnection.connection.getSchemaReader().getLevelMembers(
077                    hierarchy.getLevels()[0], true);
078    
079            final List<mondrian.olap.Member> levelMemberList =
080                new ArrayList<mondrian.olap.Member>(Arrays.asList(levelMembers));
081            return new AbstractNamedList<Member>() {
082                protected String getName(Member member) {
083                    return member.getName();
084                }
085    
086                public Member get(int index) {
087                    return olap4jConnection.toOlap4j(levelMemberList.get(index));
088                }
089    
090                public int size() {
091                    return levelMemberList.size();
092                }
093            };
094        }
095    
096        public String getName() {
097            return hierarchy.getName();
098        }
099    
100        public String getUniqueName() {
101            return hierarchy.getUniqueName();
102        }
103    
104        public String getCaption(Locale locale) {
105            // todo: localize caption
106            return hierarchy.getCaption();
107        }
108    
109        public String getDescription(Locale locale) {
110            // todo: localize description
111            return hierarchy.getDescription();
112        }
113    }
114    
115    // End MondrianOlap4jHierarchy.java