001 /* 002 // $Id: Type.java 482 2012-01-05 23:27:27Z jhyde $ 003 // 004 // Licensed to Julian Hyde under one or more contributor license 005 // agreements. See the NOTICE file distributed with this work for 006 // additional information regarding copyright ownership. 007 // 008 // Julian Hyde licenses this file to you under the Apache License, 009 // Version 2.0 (the "License"); you may not use this file except in 010 // compliance with the License. You may obtain a copy of the License at: 011 // 012 // http://www.apache.org/licenses/LICENSE-2.0 013 // 014 // Unless required by applicable law or agreed to in writing, software 015 // distributed under the License is distributed on an "AS IS" BASIS, 016 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 // See the License for the specific language governing permissions and 018 // limitations under the License. 019 */ 020 package org.olap4j.type; 021 022 import org.olap4j.metadata.*; 023 024 /** 025 * Type of an MDX expression. 026 * 027 * <p>All type objects are immutable. 028 * 029 * @author jhyde 030 * @since Feb 17, 2005 031 * @version $Id: Type.java 482 2012-01-05 23:27:27Z jhyde $ 032 */ 033 public interface Type { 034 /** 035 * Returns whether this type contains a given dimension.<p/> 036 * 037 * For example: 038 * <ul> 039 * <li><code>DimensionType([Gender])</code> uses only the 040 * <code>[Gender]</code> dimension.</li> 041 * <li><code>TupleType(MemberType([Gender]), MemberType([Store]))</code> 042 * uses <code>[Gender]</code> and <code>[Store]</code> 043 * dimensions.</li> 044 * </ul><p/> 045 * 046 * The <code>maybe</code> parameter comes into play when the 047 * dimensional information is incomplete. For example, when applied to 048 * <code>TupleType(MemberType(null), MemberType([Store]))</code>, 049 * <code>usesDimension([Gender], false)</code> returns true because it 050 * is possible that the expression returns a member of the 051 * <code>[Gender]</code> dimension. 052 * 053 * @param dimension Dimension 054 * @param maybe If true, returns true only if this type definitely 055 * uses the dimension 056 * 057 * @return whether this type definitely (or if <code>maybe</code> is true, 058 * possibly) uses the given dimension 059 */ 060 boolean usesDimension(Dimension dimension, boolean maybe); 061 062 /** 063 * Returns the dimension of this type, or null if not known. 064 * 065 * @return dimension of this type 066 */ 067 Dimension getDimension(); 068 069 /** 070 * Returns the hierarchy of this type. If not applicable, throws. 071 * 072 * @return hierarchy of this type 073 */ 074 Hierarchy getHierarchy(); 075 076 /** 077 * Returns the level of this type, or null if not known. 078 * 079 * @return level of this type 080 */ 081 Level getLevel(); 082 083 } 084 085 // End Type.java