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