001    /*
002    // $Id: DimensionType.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.Dimension;
013    import org.olap4j.metadata.Hierarchy;
014    import org.olap4j.metadata.Level;
015    
016    /**
017     * The type of an expression which represents a Dimension.
018     *
019     * @author jhyde
020     * @since Feb 17, 2005
021     * @version $Id: DimensionType.java 247 2009-06-20 05:52:40Z jhyde $
022     */
023    public class DimensionType implements Type {
024        private final Dimension dimension;
025        private final String digest;
026    
027        public static final DimensionType Unknown = new DimensionType(null);
028    
029        /**
030         * Creates a type representing a dimension.
031         *
032         * @param dimension Dimension which values of this type must belong to, or
033         *   null if not known
034         */
035        public DimensionType(Dimension dimension) {
036            this.dimension = dimension;
037            StringBuilder buf = new StringBuilder("DimensionType<");
038            if (dimension != null) {
039                buf.append("dimension=").append(dimension.getUniqueName());
040            }
041            buf.append(">");
042            this.digest = buf.toString();
043        }
044    
045        public boolean usesDimension(Dimension dimension, boolean maybe) {
046            if (this.dimension == null) {
047                return maybe;
048            } else {
049                return this.dimension.equals(dimension);
050            }
051        }
052    
053        public Hierarchy getHierarchy() {
054            return dimension == null
055                ? null
056                : dimension.getHierarchies().size() > 1
057                ? null
058                : dimension.getHierarchies().get(0);
059        }
060    
061        public Level getLevel() {
062            return null;
063        }
064    
065        public Dimension getDimension() {
066            return dimension;
067        }
068    
069        public String toString() {
070            return digest;
071        }
072    }
073    
074    // End DimensionType.java