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-2012 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.olap4j; 011 012import mondrian.olap.*; 013 014import org.olap4j.OlapException; 015import org.olap4j.impl.*; 016import org.olap4j.metadata.Dimension; 017import org.olap4j.metadata.Hierarchy; 018import org.olap4j.metadata.*; 019 020/** 021 * Implementation of {@link org.olap4j.metadata.Dimension} 022 * for the Mondrian OLAP engine. 023 * 024 * @author jhyde 025 * @since May 24, 2007 026 */ 027class MondrianOlap4jDimension 028 extends MondrianOlap4jMetadataElement 029 implements Dimension, Named 030{ 031 private final MondrianOlap4jSchema olap4jSchema; 032 private final mondrian.olap.Dimension dimension; 033 034 MondrianOlap4jDimension( 035 MondrianOlap4jSchema olap4jSchema, 036 mondrian.olap.Dimension dimension) 037 { 038 this.olap4jSchema = olap4jSchema; 039 this.dimension = dimension; 040 } 041 042 public boolean equals(Object obj) { 043 return obj instanceof MondrianOlap4jDimension 044 && dimension.equals(((MondrianOlap4jDimension) obj).dimension); 045 } 046 047 public int hashCode() { 048 return dimension.hashCode(); 049 } 050 051 public NamedList<Hierarchy> getHierarchies() { 052 final NamedList<MondrianOlap4jHierarchy> list = 053 new NamedListImpl<MondrianOlap4jHierarchy>(); 054 final MondrianOlap4jConnection olap4jConnection = 055 olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection; 056 final mondrian.olap.SchemaReader schemaReader = 057 olap4jConnection.getMondrianConnection2().getSchemaReader() 058 .withLocus(); 059 for (mondrian.olap.Hierarchy hierarchy 060 : schemaReader.getDimensionHierarchies(dimension)) 061 { 062 list.add(olap4jConnection.toOlap4j(hierarchy)); 063 } 064 return Olap4jUtil.cast(list); 065 } 066 067 public Hierarchy getDefaultHierarchy() { 068 return getHierarchies().get(0); 069 } 070 071 public Type getDimensionType() throws OlapException { 072 final DimensionType dimensionType = dimension.getDimensionType(); 073 switch (dimensionType) { 074 case StandardDimension: 075 return Type.OTHER; 076 case MeasuresDimension: 077 return Type.MEASURE; 078 case TimeDimension: 079 return Type.TIME; 080 default: 081 throw Util.unexpected(dimensionType); 082 } 083 } 084 085 public String getName() { 086 return dimension.getName(); 087 } 088 089 public String getUniqueName() { 090 return dimension.getUniqueName(); 091 } 092 093 public String getCaption() { 094 return dimension.getLocalized( 095 OlapElement.LocalizedProperty.CAPTION, 096 olap4jSchema.getLocale()); 097 } 098 099 public String getDescription() { 100 return dimension.getLocalized( 101 OlapElement.LocalizedProperty.DESCRIPTION, 102 olap4jSchema.getLocale()); 103 } 104 105 public boolean isVisible() { 106 return dimension.isVisible(); 107 } 108 109 protected OlapElement getOlapElement() { 110 return dimension; 111 } 112} 113 114// End MondrianOlap4jDimension.java