001 /*
002 // $Id: HierarchyType.java 247 2009-06-20 05:52:40Z jhyde $
003 // This software is subject to the terms of the Eclipse Public License v1.0
004 // Agreement, available at the following URL:
005 // http://www.eclipse.org/legal/epl-v10.html.
006 // Copyright (C) 2005-2009 Julian Hyde
007 // All Rights Reserved.
008 // You must accept the terms of that agreement to use this software.
009 */
010 package org.olap4j.type;
011
012 import org.olap4j.metadata.Hierarchy;
013 import org.olap4j.metadata.Dimension;
014 import org.olap4j.metadata.Level;
015 import org.olap4j.OlapException;
016
017 /**
018 * The type of an expression which represents a hierarchy.
019 *
020 * @author jhyde
021 * @since Feb 17, 2005
022 * @version $Id: HierarchyType.java 247 2009-06-20 05:52:40Z jhyde $
023 */
024 public class HierarchyType implements Type {
025 private final Dimension dimension;
026 private final Hierarchy hierarchy;
027 private final String digest;
028
029 /**
030 * Creates a type representing a hierarchy.
031 *
032 * @param dimension Dimension which values of this type must belong to, or
033 * null if not known
034 *
035 * @param hierarchy Hierarchy which values of this type must belong to, or
036 * null if not known
037 */
038 public HierarchyType(
039 Dimension dimension,
040 Hierarchy hierarchy)
041 {
042 this.dimension = dimension;
043 this.hierarchy = hierarchy;
044 StringBuilder buf = new StringBuilder("HierarchyType<");
045 if (hierarchy != null) {
046 buf.append("hierarchy=").append(hierarchy.getUniqueName());
047 } else if (dimension != null) {
048 buf.append("dimension=").append(dimension.getUniqueName());
049 }
050 buf.append(">");
051 this.digest = buf.toString();
052 }
053
054 // not part of public olap4j API
055 private static HierarchyType forType(Type type) throws OlapException {
056 return new HierarchyType(type.getDimension(), type.getHierarchy());
057 }
058
059 public boolean usesDimension(Dimension dimension, boolean maybe) {
060 if (this.dimension == null) {
061 return maybe;
062 } else {
063 return this.dimension.equals(dimension);
064 }
065 }
066
067 public Dimension getDimension() {
068 return dimension;
069 }
070
071 public Hierarchy getHierarchy() {
072 return hierarchy;
073 }
074
075 public Level getLevel() {
076 return null;
077 }
078
079 public String toString() {
080 return digest;
081 }
082 }
083
084 // End HierarchyType.java