/*
* This software is subject to the terms of the Eclipse Public License v1.0
* Agreement, available at the following URL:
* http://www.eclipse.org/legal/epl-v10.html.
* You must accept the terms of that agreement to use this software.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package mondrian.olap4j;
import mondrian.olap.OlapElement;
import org.olap4j.OlapException;
import org.olap4j.impl.*;
import org.olap4j.metadata.*;
import java.util.List;
/**
* Implementation of {@link org.olap4j.metadata.Hierarchy}
* for the Mondrian OLAP engine.
*
* @author jhyde
* @since May 25, 2007
*/
class MondrianOlap4jHierarchy
extends MondrianOlap4jMetadataElement
implements Hierarchy, Named
{
final MondrianOlap4jSchema olap4jSchema;
final mondrian.olap.Hierarchy hierarchy;
MondrianOlap4jHierarchy(
MondrianOlap4jSchema olap4jSchema,
mondrian.olap.Hierarchy hierarchy)
{
this.olap4jSchema = olap4jSchema;
this.hierarchy = hierarchy;
}
public boolean equals(Object obj) {
return obj instanceof MondrianOlap4jHierarchy
&& hierarchy.equals(((MondrianOlap4jHierarchy) obj).hierarchy);
}
public int hashCode() {
return hierarchy.hashCode();
}
public Dimension getDimension() {
return new MondrianOlap4jDimension(
olap4jSchema, hierarchy.getDimension());
}
public NamedList<Level> getLevels() {
final NamedList<MondrianOlap4jLevel> list =
new NamedListImpl<MondrianOlap4jLevel>();
final MondrianOlap4jConnection olap4jConnection =
olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
final mondrian.olap.SchemaReader schemaReader =
olap4jConnection.getMondrianConnection2().getSchemaReader()
.withLocus();
for (mondrian.olap.Level level
: schemaReader.getHierarchyLevels(hierarchy))
{
list.add(olap4jConnection.toOlap4j(level));
}
return Olap4jUtil.cast(list);
}
public boolean hasAll() {
return hierarchy.hasAll();
}
public Member getDefaultMember() throws OlapException {
final MondrianOlap4jConnection olap4jConnection =
olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
final mondrian.olap.SchemaReader schemaReader =
olap4jConnection.getMondrianConnection()
.getSchemaReader().withLocus();
return
olap4jConnection.toOlap4j(
schemaReader.getHierarchyDefaultMember(hierarchy));
}
public NamedList<Member> getRootMembers() throws OlapException {
final MondrianOlap4jConnection olap4jConnection =
olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
final List<mondrian.olap.Member> levelMembers =
olap4jConnection.getMondrianConnection().getSchemaReader()
.withLocus()
.getLevelMembers(
hierarchy.getLevels()[0], true);
return new AbstractNamedList<Member>() {
public String getName(Object member) {
return ((Member)member).getName();
}
public Member get(int index) {
return olap4jConnection.toOlap4j(levelMembers.get(index));
}
public int size() {
return levelMembers.size();
}
};
}
public String getName() {
return hierarchy.getName();
}
public String getUniqueName() {
return hierarchy.getUniqueName();
}
public String getCaption() {
return hierarchy.getLocalized(
OlapElement.LocalizedProperty.CAPTION,
olap4jSchema.getLocale());
}
public String getDescription() {
return hierarchy.getLocalized(
OlapElement.LocalizedProperty.DESCRIPTION,
olap4jSchema.getLocale());
}
public boolean isVisible() {
return hierarchy.isVisible();
}
protected OlapElement getOlapElement() {
return hierarchy;
}
}
// End MondrianOlap4jHierarchy.java