001    /*
002    // $Id: Dimension.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.metadata;
021    
022    import org.olap4j.OlapException;
023    
024    /**
025     * An organized hierarchy of categories, known as levels, that describes data
026     * in a cube.
027     *
028     * <p>A Dimension typically describes a similar set of members upon which the
029     * user wants to base an analysis.
030     *
031     * <p>A Dimension must have at least one Hierarchy, and may have more than one,
032     * but most have exactly one Hierarchy.</p>
033     *
034     * @author jhyde
035     * @version $Id: Dimension.java 482 2012-01-05 23:27:27Z jhyde $
036     * @since Aug 22, 2006
037     */
038    public interface Dimension extends MetadataElement {
039    
040        /**
041         * Returns the hierarchies in this Dimension.
042         *
043         * <p>Many dimensions have only one Hierarchy, whose name is the same as the
044         * Dimension.
045         *
046         * <p>The caller should assume that the list is immutable;
047         * if the caller modifies the list, behavior is undefined.</p>
048         *
049         * @see org.olap4j.OlapDatabaseMetaData#getHierarchies
050         *
051         * @return hierarchies in this dimension
052         */
053        NamedList<Hierarchy> getHierarchies();
054    
055        /**
056         * Returns the type of this Dimension.
057         *
058         * @return dimension type
059         *
060         * @throws OlapException if database error occurs
061         */
062        Dimension.Type getDimensionType() throws OlapException;
063    
064        /**
065         * Returns the default <code>Hierarchy</code> of this Dimension.
066         *
067         * @return default hierarchy
068         */
069        Hierarchy getDefaultHierarchy();
070    
071        /**
072         * Enumeration of the types of a <code>Dimension</code>.
073         *
074         * <p>Some of the values are as specified by XMLA.
075         * For example, XMLA specifies MD_DIMTYPE_PRODUCTS with ordinal 8,
076         * which corresponds to the value {@link #PRODUCTS},
077         * whose {@link #xmlaOrdinal} is 8.
078         *
079         * @see Level.Type
080         * @see Member.Type
081         * @see Dimension#getDimensionType
082         */
083        public enum Type implements XmlaConstant {
084            /**
085             * Indicates that the dimension is not related to time.
086             */
087            UNKNOWN(0),
088    
089            /**
090             * Indicates that a dimension is a time dimension.
091             */
092            TIME(1),
093    
094            /**
095             * Indicates that a dimension is the Measures dimension.
096             */
097            MEASURE(2),
098    
099            OTHER(3),
100            QUANTITATIVE(5),
101            ACCOUNTS(6),
102            CUSTOMERS(7),
103            PRODUCTS(8),
104            SCENARIO(9),
105            UTILITY(10),
106            CURRENCY(11),
107            RATES(12),
108            CHANNEL(13),
109            PROMOTION(14),
110            ORGANIZATION(15),
111            BILL_OF_MATERIALS(16),
112            GEOGRAPHY(17);
113    
114            private final int xmlaOrdinal;
115    
116            private static final Dictionary<Type> DICTIONARY =
117                DictionaryImpl.forClass(Type.class);
118    
119            /**
120             * Per {@link org.olap4j.metadata.XmlaConstant}, returns a dictionary
121             * of all values of this enumeration.
122             *
123             * @return Dictionary of all values
124             */
125            public static Dictionary<Type> getDictionary() {
126                return DICTIONARY;
127            }
128    
129            /**
130             * Creates a Dimension Type.
131             *
132             * @param xmlaOrdinal Ordinal code as specified by XMLA
133             */
134            private Type(int xmlaOrdinal) {
135                this.xmlaOrdinal = xmlaOrdinal;
136            }
137    
138            public String xmlaName() {
139                return "MD_DIMTYPE_" + name();
140            }
141    
142            public String getDescription() {
143                return "";
144            }
145    
146            public int xmlaOrdinal() {
147                return xmlaOrdinal;
148            }
149        }
150    }
151    
152    // End Dimension.java