blob: 44d0d1083743959940a338395c665916dd9703b1 [file] [log] [blame]
/**
* 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);
}
}
}