001 /* 002 // $Id: LevelType.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-2008 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.Level; 013 import org.olap4j.metadata.Dimension; 014 import org.olap4j.metadata.Hierarchy; 015 import org.olap4j.OlapException; 016 017 /** 018 * The type of an expression which represents a level. 019 * 020 * @author jhyde 021 * @since Feb 17, 2005 022 * @version $Id: LevelType.java 247 2009-06-20 05:52:40Z jhyde $ 023 */ 024 public class LevelType implements Type { 025 private final Dimension dimension; 026 private final Hierarchy hierarchy; 027 private final Level level; 028 private final String digest; 029 030 /** 031 * Creates a type representing a level. 032 * 033 * @param dimension Dimension which values of this type must belong to, or 034 * null if not known 035 * 036 * @param hierarchy Hierarchy which values of this type must belong to, or 037 * null if not known 038 * 039 * @param level Level which values of this type must belong to, or null if 040 * not known 041 */ 042 public LevelType( 043 Dimension dimension, 044 Hierarchy hierarchy, 045 Level level) 046 { 047 this.dimension = dimension; 048 this.hierarchy = hierarchy; 049 this.level = level; 050 if (level != null) { 051 assert hierarchy != null : "hierarchy != null"; 052 assert level.getHierarchy() == hierarchy 053 : "level.getHierarchy() == hierarchy"; 054 } 055 if (hierarchy != null) { 056 assert dimension != null : "dimension != null"; 057 assert hierarchy.getDimension() == dimension 058 : "hierarchy.getDimension() == dimension"; 059 } 060 StringBuilder buf = new StringBuilder("LevelType<"); 061 if (level != null) { 062 buf.append("level=").append(level.getUniqueName()); 063 } else if (hierarchy != null) { 064 buf.append("hierarchy=").append(hierarchy.getUniqueName()); 065 } else if (dimension != null) { 066 buf.append("dimension=").append(dimension.getUniqueName()); 067 } 068 buf.append(">"); 069 this.digest = buf.toString(); 070 } 071 072 // not part of public olap4j API 073 private static LevelType forType(Type type) throws OlapException { 074 return new LevelType( 075 type.getDimension(), 076 type.getHierarchy(), 077 type.getLevel()); 078 } 079 080 public boolean usesDimension(Dimension dimension, boolean maybe) { 081 if (this.dimension == null) { 082 return maybe; 083 } else { 084 return this.dimension.equals(dimension); 085 } 086 } 087 088 public Dimension getDimension() { 089 return dimension; 090 } 091 092 public Hierarchy getHierarchy() { 093 return hierarchy; 094 } 095 096 public Level getLevel() { 097 return level; 098 } 099 100 public String toString() { 101 return digest; 102 } 103 } 104 105 // End LevelType.java