Package org.geoserver.hibernate

Source Code of org.geoserver.hibernate.HibGeoServerLoader

package org.geoserver.hibernate;

import java.io.File;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogFacade;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerFacade;
import org.geoserver.config.GeoServerLoader;
import org.geoserver.config.impl.GeoServerImpl;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.platform.ContextLoadedEvent;
import org.geoserver.platform.GeoServerResourceLoader;
import org.hibernate.SessionFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;

public class HibGeoServerLoader extends GeoServerLoader {

    CatalogFacade catalogFacade;
    GeoServerFacade geoServerFacade;
   
    public HibGeoServerLoader(GeoServerResourceLoader resourceLoader) {
        super(resourceLoader);
    }

    public void setCatalogFacade(CatalogFacade catalogFacade) {
        this.catalogFacade = catalogFacade;
    }
   
    public void setGeoServerFacade(GeoServerFacade geoServerFacade) {
        this.geoServerFacade = geoServerFacade;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        super.setApplicationContext(applicationContext);
       
        //we create a session during initialization for code that access the catalog/config
        // during startup, once geoserver is startup we use a servlet filter to ensure there is an
        // active session
        final SessionFactory sessionFactory =
            (SessionFactory) applicationContext.getBean("hibSessionFactory");
        HibUtil.setUpSession(sessionFactory);
       
        if (applicationContext instanceof ConfigurableApplicationContext) {
            ((ConfigurableApplicationContext)applicationContext).addApplicationListener(new ApplicationListener() {
                public void onApplicationEvent(ApplicationEvent event) {
                    if (event instanceof ContextLoadedEvent) {
                        HibUtil.tearDownSession(sessionFactory, null);
                    }
                }
            });
        }
    }
   
    @Override
    protected void loadCatalog(Catalog catalog, XStreamPersister xp) throws Exception {
        ((CatalogImpl)catalog).setFacade(catalogFacade);
        //clearCatalog(CatalogFacade); -- JD: only enabled when testing
       
        //if this is the first time loading up with hibernate configuration, migrate from old
        // file based structure
        File marker = resourceLoader.find("hibernate.marker");
        if (marker == null) {
            readCatalog(catalog, xp);
        }
       
    }

    void clearCatalog(CatalogFacade dao) {
        for (LayerGroupInfo lg : dao.getLayerGroups())  { dao.remove(lg); }
        for (LayerInfo l : dao.getLayers())  { dao.remove(l); }
        for (ResourceInfo r : dao.getResources(ResourceInfo.class))  { dao.remove(r); }
        for (StoreInfo s : dao.getStores(StoreInfo.class)) { dao.remove(s); }
        for (WorkspaceInfo ws : dao.getWorkspaces()){ dao.remove(ws); }
        for (NamespaceInfo ns : dao.getNamespaces()){ dao.remove(ns); }
        for (StyleInfo s : dao.getStyles()){ dao.remove(s); }

    }
    @Override
    protected void loadGeoServer(GeoServer geoServer, XStreamPersister xp) throws Exception {
        ((GeoServerImpl)geoServer).setFacade(geoServerFacade);
       
        //if this is the first time loading up with hibernate configuration, migrate from old
        // file based structure
        File marker = resourceLoader.find("hibernate.marker");
        if (marker == null) {
            readConfiguration(geoServer, xp);
           
            resourceLoader.createFile("hibernate.marker");
        }
       
        //do a post check to ensure things were loaded, for instance if we are starting from
        // an empty data directory all objects will be empty
        // TODO: this should really be moved elsewhere
        if (geoServer.getGlobal() == null) {
            geoServer.setGlobal(geoServer.getFactory().createGlobal());
        }
        if (geoServer.getLogging() == null) {
            geoServer.setLogging(geoServer.getFactory().createLogging());
        }
    }
   
    @Override
    public void reload() throws Exception {
        //for testing, remove hibernate.marker file
        File f = resourceLoader.find("hibernate.marker");
        if (f != null) {
            f.delete();
        }
       
        super.reload();
    }

}
TOP

Related Classes of org.geoserver.hibernate.HibGeoServerLoader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.