001/*
002// $Id: CellSetMetaData.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*/
020package org.olap4j;
021
022import org.olap4j.metadata.*;
023
024import java.sql.ResultSetMetaData;
025
026/**
027 * An object that can be used to get information about the axes
028 * and cells in a <code>CellSet</code> object.
029 *
030 * <p>The following code fragment creates the <code>CellSet</code> object cs,
031 * creates the <code>CellSetMetaData</code> object csmd, and uses csmd
032 * to find out how many axes cs has and the name of the cube.
033 *
034 * <blockquote>
035 * <pre>
036 * CellSet cs = stmt.executeOlapQuery(
037 *     "SELECT {[Measures].[Unit Sales] ON COLUMNS,\n" +
038 *     "   Crossjoin([Time].Children, [Store].Children) ON ROWS\n" +
039 *     "FROM [Sales]");
040 * CellSetMetaData csmd = cs.getMetaData();
041 * int numberOfAxes = csmd.getAxesMetaData().size();
042 * String cubeName = csmd.getCube().getName();
043 * </pre>
044 * </blockquote>
045 *
046 * @author jhyde
047 * @version $Id: CellSetMetaData.java 482 2012-01-05 23:27:27Z jhyde $
048 * @since Oct 23, 2006
049 */
050public interface CellSetMetaData extends ResultSetMetaData, OlapWrapper {
051    /**
052     * Returns a list of Property objects which each Cell may have.
053     *
054     * @return list of cell properties
055     */
056    NamedList<Property> getCellProperties();
057
058    /**
059     * Returns the Cube which was referenced in this statement.
060     *
061     * @return cube referenced in this statement
062     */
063    Cube getCube();
064
065    /**
066     * Returns a list of CellSetAxisMetaData describing each result axis.
067     *
068     * @return list of metadata describing each result axis
069     */
070    NamedList<CellSetAxisMetaData> getAxesMetaData();
071
072    /**
073     * Returns a CellSetAxisMetaData describing the filter axis. Never returns
074     * null; if the MDX statement contains no WHERE clause, the description of
075     * the filter contains no hierarchies.
076     *
077     * @return metadata describing filter axis
078     */
079    CellSetAxisMetaData getFilterAxisMetaData();
080}
081
082// End CellSetMetaData.java