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