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) 2007-2013 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.olap4j; 011 012import mondrian.olap.OlapElement; 013 014import org.olap4j.OlapException; 015import org.olap4j.impl.*; 016import org.olap4j.metadata.*; 017 018import java.util.List; 019 020/** 021 * Implementation of {@link org.olap4j.metadata.Hierarchy} 022 * for the Mondrian OLAP engine. 023 * 024 * @author jhyde 025 * @since May 25, 2007 026 */ 027class MondrianOlap4jHierarchy 028 extends MondrianOlap4jMetadataElement 029 implements Hierarchy, Named 030{ 031 final MondrianOlap4jSchema olap4jSchema; 032 final mondrian.olap.Hierarchy hierarchy; 033 034 MondrianOlap4jHierarchy( 035 MondrianOlap4jSchema olap4jSchema, 036 mondrian.olap.Hierarchy hierarchy) 037 { 038 this.olap4jSchema = olap4jSchema; 039 this.hierarchy = hierarchy; 040 } 041 042 public boolean equals(Object obj) { 043 return obj instanceof MondrianOlap4jHierarchy 044 && hierarchy.equals(((MondrianOlap4jHierarchy) obj).hierarchy); 045 } 046 047 public int hashCode() { 048 return hierarchy.hashCode(); 049 } 050 051 public Dimension getDimension() { 052 return new MondrianOlap4jDimension( 053 olap4jSchema, hierarchy.getDimension()); 054 } 055 056 public NamedList<Level> getLevels() { 057 final NamedList<MondrianOlap4jLevel> list = 058 new NamedListImpl<MondrianOlap4jLevel>(); 059 final MondrianOlap4jConnection olap4jConnection = 060 olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection; 061 final mondrian.olap.SchemaReader schemaReader = 062 olap4jConnection.getMondrianConnection2().getSchemaReader() 063 .withLocus(); 064 for (mondrian.olap.Level level 065 : schemaReader.getHierarchyLevels(hierarchy)) 066 { 067 list.add(olap4jConnection.toOlap4j(level)); 068 } 069 return Olap4jUtil.cast(list); 070 } 071 072 public boolean hasAll() { 073 return hierarchy.hasAll(); 074 } 075 076 public Member getDefaultMember() throws OlapException { 077 final MondrianOlap4jConnection olap4jConnection = 078 olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection; 079 final mondrian.olap.SchemaReader schemaReader = 080 olap4jConnection.getMondrianConnection() 081 .getSchemaReader().withLocus(); 082 return 083 olap4jConnection.toOlap4j( 084 schemaReader.getHierarchyDefaultMember(hierarchy)); 085 } 086 087 public NamedList<Member> getRootMembers() throws OlapException { 088 final MondrianOlap4jConnection olap4jConnection = 089 olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection; 090 final List<mondrian.olap.Member> levelMembers = 091 olap4jConnection.getMondrianConnection().getSchemaReader() 092 .withLocus() 093 .getLevelMembers( 094 hierarchy.getLevels()[0], true); 095 096 return new AbstractNamedList<Member>() { 097 public String getName(Object member) { 098 return ((Member)member).getName(); 099 } 100 101 public Member get(int index) { 102 return olap4jConnection.toOlap4j(levelMembers.get(index)); 103 } 104 105 public int size() { 106 return levelMembers.size(); 107 } 108 }; 109 } 110 111 public String getName() { 112 return hierarchy.getName(); 113 } 114 115 public String getUniqueName() { 116 return hierarchy.getUniqueName(); 117 } 118 119 public String getCaption() { 120 return hierarchy.getLocalized( 121 OlapElement.LocalizedProperty.CAPTION, 122 olap4jSchema.getLocale()); 123 } 124 125 public String getDescription() { 126 return hierarchy.getLocalized( 127 OlapElement.LocalizedProperty.DESCRIPTION, 128 olap4jSchema.getLocale()); 129 } 130 131 public boolean isVisible() { 132 return hierarchy.isVisible(); 133 } 134 135 protected OlapElement getOlapElement() { 136 return hierarchy; 137 } 138} 139 140// End MondrianOlap4jHierarchy.java