001    /*
002    // $Id: Catalog.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.*;
023    
024    /**
025     * <p>Catalogs are the second element of the hierarchy of metadata objects.
026     * A Catalog contains one or more {@link Schema}s and has a parent
027     * {@link Database}.</p>
028     *
029     * <p>Some OLAP servers may only have one Catalog. Mondrian is one such
030     * OLAP server; its sole catalog is called "LOCALDB".
031     *
032     * <p>To obtain the collection of catalogs in the current server, call the
033     * {@link OlapConnection#getOlapCatalogs()} method.
034     *
035     * <p>The hierarchy of metadata objects, rooted at the connection from which
036     * they are accessed, is as follows:
037     * <blockquote>
038     * <ul>
039     * <li type="circle">{@link org.olap4j.OlapConnection}<ul>
040     *     <li type="circle">{@link Database}<ul>
041     *         <li type="circle">{@link Catalog}<ul>
042     *             <li type="circle">{@link Schema}<ul>
043     *                 <li type="circle">{@link Cube}<ul>
044     *                     <li type="circle">{@link Dimension}<ul>
045     *                         <li type="circle">{@link Hierarchy}<ul>
046     *                             <li type="circle">{@link Level}<ul>
047     *                                 <li type="circle">{@link Member}</li>
048     *                                 <li type="circle">{@link Property}</li>
049     *                             </ul></li>
050     *                         </ul></li>
051     *                     </ul></li>
052     *                 <li type="circle">{@link NamedSet}</li>
053     *                 </ul></li>
054     *             <li type="circle">{@link Dimension} (shared)</li>
055     *             </ul></li>
056     *         </ul></li>
057     *     </ul></li>
058     *  </ul>
059     * </blockquote>
060     * </p>
061     *
062     * @author jhyde
063     * @version $Id: Catalog.java 482 2012-01-05 23:27:27Z jhyde $
064     * @since Oct 24, 2006
065     */
066    public interface Catalog {
067        /**
068         * Returns a list of {@link Schema} objects which belong to
069         * this <code>Catalog</code>.
070         *
071         * <p>The caller should assume that the list is immutable;
072         * if the caller modifies the list, behavior is undefined.</p>
073         *
074         * @see org.olap4j.OlapDatabaseMetaData#getSchemas
075         * @return List of Schema in this <code>Catalog</code>
076         * @throws OlapException if error occurs
077         */
078        NamedList<Schema> getSchemas() throws OlapException;
079    
080        /**
081         * Returns the name of this Catalog.
082         *
083         * @return name of this Catalog
084         */
085        String getName();
086    
087        /**
088         * Retrieves the metadata describing the OLAP server that this Catalog
089         * belongs to.
090         *
091         * @return metadata describing the OLAP server
092         */
093        OlapDatabaseMetaData getMetaData();
094    
095        /**
096         * Returns the parent database of this catalog.
097         * @return A Database object to which this catalog belongs.
098         */
099        Database getDatabase();
100    }
101    
102    // End Catalog.java