/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.geoserver.platform.GeoServerExtensions; import org.geotools.data.DataAccess; import org.geotools.data.DataStore; import org.geotools.data.Repository; import org.geotools.util.logging.Logging; import org.opengis.feature.type.Name; /** * Implementation of GeoTools Repository interface wrapped around the GeoServer catalog. * * @author Christian Mueller * @author Justin Deoliveira */ public class CatalogRepository implements Repository, Serializable { /** * logger */ static Logger LOGGER = Logging.getLogger( "org.geoserver.catalog"); /** * the geoserver catalog */ private Catalog catalog; public CatalogRepository() { } public CatalogRepository(Catalog catalog) { this.catalog = catalog; } public DataStore dataStore(Name name) { DataAccess da = access(name); if ( da instanceof DataStore ) { return (DataStore) da; } LOGGER.severe( name + " is not a data store."); return null; } public DataAccess<?, ?> access(Name name) { String workspace = name.getNamespaceURI(); String localName = name.getLocalPart(); DataStoreInfo info = getCatalog().getDataStoreByName(workspace, localName); if (info == null) { throw new RuntimeException("Cannot find datastore " + localName + " in workspace " + workspace); } try { return info.getDataStore(null); } catch (IOException ex) { throw new RuntimeException(ex); } } public List<DataStore> getDataStores() { List<DataStore> dataStores = new ArrayList<DataStore>(); for ( DataStoreInfo ds : getCatalog().getDataStores() ) { if ( !ds.isEnabled() ) { continue; } try { DataAccess da = ds.getDataStore( null ); if ( da instanceof DataStore ) { dataStores.add( (DataStore) da ); } } catch (IOException e) { LOGGER.log( Level.WARNING, "Unable to get datastore '" + ds.getName() + "'", e ); } } return dataStores; } /** * Accessor for the GeoServer catalog. */ public Catalog getCatalog() { if (catalog != null) { return catalog; } catalog = GeoServerExtensions.bean( Catalog.class ); if ( catalog == null ) { LOGGER.severe( "Could not locate geoserver catalog"); } return catalog; } }