| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.db.metadata.model.api; |
| |
| import java.sql.DatabaseMetaData; |
| import java.util.Collection; |
| import org.netbeans.modules.db.metadata.model.MetadataAccessor; |
| import org.netbeans.modules.db.metadata.model.MetadataModelImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.CatalogImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ColumnImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ForeignKeyColumnImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ForeignKeyImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.FunctionImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.IndexColumnImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.IndexImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.MetadataImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ParameterImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.PrimaryKeyImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ProcedureImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.SchemaImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.TableImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ValueImplementation; |
| import org.netbeans.modules.db.metadata.model.spi.ViewImplementation; |
| |
| /** |
| * Encapsulates information about the metadata in a database. The meaning |
| * of "database" in this documentation is similar to that in {@link DatabaseMetaData}. |
| * |
| * @author Andrei Badea |
| */ |
| public class Metadata { |
| |
| private final MetadataImplementation impl; |
| |
| static { |
| MetadataAccessor.setDefault(new MetadataAccessorImpl()); |
| } |
| |
| Metadata(MetadataImplementation impl) { |
| this.impl = impl; |
| } |
| |
| // XXX can this return null? |
| /** |
| * Returns the default catalog in this metadata instance. |
| * |
| * @return the default catalog. |
| * @throws MetadataException if an error occurs while retrieving the metadata. |
| */ |
| public Catalog getDefaultCatalog() { |
| return impl.getDefaultCatalog(); |
| } |
| |
| /** |
| * Returns the catalogs in this metadata instance. |
| * |
| * @return the catalogs. |
| * @throws MetadataException if an error occurs while retrieving the metadata. |
| */ |
| public Collection<Catalog> getCatalogs() { |
| return impl.getCatalogs(); |
| } |
| |
| /** |
| * Returns the catalog with the given name. |
| * |
| * @param name a catalog name. |
| * @return a catalog named {@code name} or {@code null} if there is no such catalog. |
| * @throws MetadataException if an error occurs while retrieving the metadata. |
| */ |
| public Catalog getCatalog(String name) { |
| return impl.getCatalog(name); |
| } |
| |
| /** |
| * @return the default schema or {@code null}. |
| * @throws MetadataException if an error occurs while retrieving the metadata. |
| */ |
| public Schema getDefaultSchema() { |
| return impl.getDefaultSchema(); |
| } |
| |
| /** |
| * @throws MetadataException if an error occurs while retrieving the metadata. |
| */ |
| public void refresh() { |
| impl.refresh(); |
| } |
| |
| private static final class MetadataAccessorImpl extends MetadataAccessor { |
| |
| @Override |
| public MetadataModel createMetadataModel(MetadataModelImplementation impl) { |
| return new MetadataModel(impl); |
| } |
| |
| @Override |
| public Metadata createMetadata(MetadataImplementation impl) { |
| return new Metadata(impl); |
| } |
| |
| @Override |
| public Catalog createCatalog(CatalogImplementation impl) { |
| return new Catalog(impl); |
| } |
| |
| @Override |
| public Schema createSchema(SchemaImplementation impl) { |
| return new Schema(impl); |
| } |
| |
| @Override |
| public Table createTable(TableImplementation impl) { |
| return new Table(impl); |
| } |
| |
| |
| @Override |
| public View createView(ViewImplementation impl) { |
| return new View(impl); |
| } |
| |
| @Override |
| public Column createColumn(ColumnImplementation impl) { |
| return new Column(impl); |
| } |
| |
| @Override |
| public Procedure createProcedure(ProcedureImplementation impl) { |
| return new Procedure(impl); |
| } |
| |
| @Override |
| public Function createFunction(FunctionImplementation impl) { |
| return new Function(impl); |
| } |
| |
| @Override |
| public Parameter createParameter(ParameterImplementation impl) { |
| return new Parameter(impl); |
| } |
| |
| @Override |
| public Value createValue(ValueImplementation impl) { |
| return new Value(impl); |
| } |
| |
| @Override |
| public CatalogImplementation getCatalogImpl(Catalog catalog) { |
| return catalog.impl; |
| } |
| |
| @Override |
| public PrimaryKey createPrimaryKey(PrimaryKeyImplementation impl) { |
| return new PrimaryKey(impl); |
| } |
| |
| @Override |
| public Index createIndex(IndexImplementation impl) { |
| return new Index(impl); |
| } |
| |
| @Override |
| public IndexColumn createIndexColumn(IndexColumnImplementation impl) { |
| return new IndexColumn(impl); |
| } |
| |
| @Override |
| public ForeignKeyColumn createForeignKeyColumn(ForeignKeyColumnImplementation impl) { |
| return new ForeignKeyColumn(impl); |
| } |
| |
| @Override |
| public ForeignKey createForeignKey(ForeignKeyImplementation impl) { |
| return new ForeignKey(impl); |
| } |
| } |
| |
| } |