package org.geoserver.config;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.event.CatalogListener;
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.config.impl.CoverageAccessInfoImpl;
import org.geoserver.config.impl.GeoServerInfoImpl;
import org.geoserver.config.util.LegacyConfigurationImporter;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamServiceLoader;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.platform.GeoServerResourceLoader;
/**
* Default GeoServerLoader which loads and persists configuration from the classic GeoServer data
* directory structure.
*
* @author Justin Deoliveira, OpenGeo
*
*/
public class DefaultGeoServerLoader extends GeoServerLoader {
ConfigurationListener listener;
GeoServerPersister persister;
public DefaultGeoServerLoader(GeoServerResourceLoader resourceLoader) {
super(resourceLoader);
}
protected void loadCatalog(Catalog catalog, XStreamPersister xp) throws Exception {
catalog.setResourceLoader(resourceLoader);
readCatalog(catalog, xp);
if ( !legacy ) {
//add the listener which will persist changes
catalog.addListener( new GeoServerPersister( resourceLoader, xp ) );
}
}
protected void loadGeoServer(final GeoServer geoServer, XStreamPersister xp) throws Exception {
if(listener == null) {
// add event listener which persists changes
final List<XStreamServiceLoader> loaders =
GeoServerExtensions.extensions( XStreamServiceLoader.class );
listener = new ServicePersister(loaders, geoServer);
geoServer.addListener(listener);
}
try {
if (this.persister != null) {
// avoid having the persister write down new config files while we read the config,
// otherwise it'll dump it back in xml files
geoserver.removeListener(persister);
} else {
// lazy creation of the persister at the first need
this.persister = new GeoServerPersister(resourceLoader, xp);
}
readConfiguration(geoServer, xp);
} finally {
// attach back the persister
geoserver.addListener(persister);
}
}
@Override
protected void initializeStyles(Catalog catalog, XStreamPersister xp) throws IOException {
//add a persister temporarily in case the styles don't exist on disk
GeoServerPersister p = new GeoServerPersister(resourceLoader, xp);
catalog.addListener(p);
super.initializeStyles(catalog, xp);
catalog.removeListener(p);
}
}