/* (c) 2014 - 2015 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.config; import java.io.IOException; import java.util.List; import org.geoserver.catalog.Catalog; 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); } else { // avoid re-dumping all service config files during load, // we'll attach it back once done geoserver.removeListener(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 catalog persister and the service one geoserver.addListener(persister); geoserver.addListener(listener); } } @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); } }