blob: f2f9ef2b9d9187399c37296922f72b29f8afff38 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.db.internal.vendor;
import java.util.Collections;
import java.util.List;
import org.eclipse.datatools.modelbase.sql.schema.Catalog;
import org.eclipse.datatools.modelbase.sql.schema.Database;
import org.eclipse.datatools.modelbase.sql.schema.Schema;
/**
* Catalog strategy for unknown DTP databases.
* @see java.sql.DatabaseMetaData#getCatalogs()
*/
class UnknownCatalogStrategy
implements CatalogStrategy
{
// singleton
private static final CatalogStrategy INSTANCE = new UnknownCatalogStrategy();
/**
* Return the singleton.
*/
static CatalogStrategy instance() {
return INSTANCE;
}
/**
* Ensure single instance.
*/
private UnknownCatalogStrategy() {
super();
}
@SuppressWarnings("unchecked")
public boolean supportsCatalogs(Database database) {
List<Catalog> catalogs = database.getCatalogs();
if ((catalogs == null) || catalogs.isEmpty()) {
return false;
}
return this.getFauxCatalog(catalogs) == null;
}
@SuppressWarnings("unchecked")
public List<Catalog> getCatalogs(Database database) {
List<Catalog> catalogs = database.getCatalogs();
// if there are no catalogs, the database must hold the schemata directly
if ((catalogs == null) || catalogs.isEmpty()) {
return Collections.emptyList();
}
Catalog fauxCatalog = this.getFauxCatalog(catalogs);
return (fauxCatalog == null) ? catalogs : Collections.<Catalog>emptyList();
}
@SuppressWarnings("unchecked")
public List<Schema> getSchemas(Database database) {
List<Catalog> catalogs = database.getCatalogs();
// if there are no catalogs, the database must hold the schemata directly
if ((catalogs == null) || catalogs.isEmpty()) {
return database.getSchemas();
}
Catalog fauxCatalog = this.getFauxCatalog(catalogs);
return (fauxCatalog != null) ? fauxCatalog.getSchemas() : Collections.emptyList();
}
private Catalog getFauxCatalog(List<Catalog> catalogs) {
if (catalogs.size() == 1) {
Catalog catalog = catalogs.get(0);
if (catalog.getName().equals("")) { //$NON-NLS-1$
return catalog;
}
}
return null;
}
}