001 /*
002 // $Id: //open/mondrian-release/3.0/src/main/mondrian/olap4j/MondrianOlap4jCellSetMetaData.java#2 $
003 // This software is subject to the terms of the Common Public License
004 // Agreement, available at the following URL:
005 // http://www.opensource.org/licenses/cpl.html.
006 // Copyright (C) 2007-2007 Julian Hyde
007 // All Rights Reserved.
008 // You must accept the terms of that agreement to use this software.
009 */
010 package mondrian.olap4j;
011
012 import mondrian.olap.Query;
013 import mondrian.olap.QueryAxis;
014 import org.olap4j.*;
015 import org.olap4j.impl.ArrayNamedListImpl;
016 import org.olap4j.metadata.*;
017
018 import java.sql.SQLException;
019
020 /**
021 * Implementation of {@link org.olap4j.CellSetMetaData}
022 * for the Mondrian OLAP engine.
023 *
024 * @author jhyde
025 * @version $Id: //open/mondrian-release/3.0/src/main/mondrian/olap4j/MondrianOlap4jCellSetMetaData.java#2 $
026 * @since Jun 13, 2007
027 */
028 class MondrianOlap4jCellSetMetaData implements CellSetMetaData {
029 final MondrianOlap4jStatement olap4jStatement;
030 private final Query query;
031 private final NamedList<CellSetAxisMetaData> axesMetaData =
032 new ArrayNamedListImpl<CellSetAxisMetaData>() {
033 protected String getName(CellSetAxisMetaData axisMetaData) {
034 return axisMetaData.getAxisOrdinal().name();
035 }
036 };
037 private final MondrianOlap4jCellSetAxisMetaData filterAxisMetaData;
038
039 MondrianOlap4jCellSetMetaData(
040 MondrianOlap4jStatement olap4jStatement,
041 Query query)
042 {
043 this.olap4jStatement = olap4jStatement;
044 this.query = query;
045
046 for (final QueryAxis queryAxis : query.getAxes()) {
047 axesMetaData.add(
048 new MondrianOlap4jCellSetAxisMetaData(
049 this, queryAxis));
050 }
051 filterAxisMetaData =
052 new MondrianOlap4jCellSetAxisMetaData(
053 this, query.getSlicerAxis());
054 }
055
056 // implement CellSetMetaData
057
058 public NamedList<Property> getCellProperties() {
059 final ArrayNamedListImpl<Property> list =
060 new ArrayNamedListImpl<Property>() {
061 protected String getName(Property property) {
062 return property.getName();
063 }
064 };
065 for (Property.StandardCellProperty property :
066 Property.StandardCellProperty.values())
067 {
068 if (query.hasCellProperty(property.getName())) {
069 list.add(property);
070 }
071 }
072 return list;
073 }
074
075 public Cube getCube() {
076 return olap4jStatement.olap4jConnection.toOlap4j(query.getCube());
077 }
078
079 public NamedList<CellSetAxisMetaData> getAxesMetaData() {
080 return axesMetaData;
081 }
082
083 public CellSetAxisMetaData getFilterAxisMetaData() {
084 return filterAxisMetaData;
085 }
086
087 // implement ResultSetMetaData
088
089 public int getColumnCount() throws SQLException {
090 throw new UnsupportedOperationException();
091 }
092
093 public boolean isAutoIncrement(int column) throws SQLException {
094 throw new UnsupportedOperationException();
095 }
096
097 public boolean isCaseSensitive(int column) throws SQLException {
098 throw new UnsupportedOperationException();
099 }
100
101 public boolean isSearchable(int column) throws SQLException {
102 throw new UnsupportedOperationException();
103 }
104
105 public boolean isCurrency(int column) throws SQLException {
106 throw new UnsupportedOperationException();
107 }
108
109 public int isNullable(int column) throws SQLException {
110 throw new UnsupportedOperationException();
111 }
112
113 public boolean isSigned(int column) throws SQLException {
114 throw new UnsupportedOperationException();
115 }
116
117 public int getColumnDisplaySize(int column) throws SQLException {
118 throw new UnsupportedOperationException();
119 }
120
121 public String getColumnLabel(int column) throws SQLException {
122 throw new UnsupportedOperationException();
123 }
124
125 public String getColumnName(int column) throws SQLException {
126 throw new UnsupportedOperationException();
127 }
128
129 public String getSchemaName(int column) throws SQLException {
130 throw new UnsupportedOperationException();
131 }
132
133 public int getPrecision(int column) throws SQLException {
134 throw new UnsupportedOperationException();
135 }
136
137 public int getScale(int column) throws SQLException {
138 throw new UnsupportedOperationException();
139 }
140
141 public String getTableName(int column) throws SQLException {
142 throw new UnsupportedOperationException();
143 }
144
145 public String getCatalogName(int column) throws SQLException {
146 throw new UnsupportedOperationException();
147 }
148
149 public int getColumnType(int column) throws SQLException {
150 throw new UnsupportedOperationException();
151 }
152
153 public String getColumnTypeName(int column) throws SQLException {
154 throw new UnsupportedOperationException();
155 }
156
157 public boolean isReadOnly(int column) throws SQLException {
158 throw new UnsupportedOperationException();
159 }
160
161 public boolean isWritable(int column) throws SQLException {
162 throw new UnsupportedOperationException();
163 }
164
165 public boolean isDefinitelyWritable(int column) throws SQLException {
166 throw new UnsupportedOperationException();
167 }
168
169 public String getColumnClassName(int column) throws SQLException {
170 throw new UnsupportedOperationException();
171 }
172
173 // implement Wrapper
174
175 public <T> T unwrap(Class<T> iface) throws SQLException {
176 if (iface.isInstance(this)) {
177 return iface.cast(this);
178 }
179 throw this.olap4jStatement.olap4jConnection.helper.createException(
180 "does not implement '" + iface + "'");
181 }
182
183 public boolean isWrapperFor(Class<?> iface) throws SQLException {
184 return iface.isInstance(this);
185 }
186
187 }
188
189 // End MondrianOlap4jCellSetMetaData.java