All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.vfny.geoserver.action.LoadXMLAction Maven / Gradle / Ivy

There is a newer version: 1.7.0
Show newest version
/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org.  All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.vfny.geoserver.action;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.geoserver.wfs.WFS;
import org.geotools.validation.xml.XMLReader;
import org.vfny.geoserver.config.validation.ValidationConfig;
import org.vfny.geoserver.global.ConfigurationException;
import org.vfny.geoserver.global.GeoserverDataDirectory;
import org.vfny.geoserver.global.UserContainer;
import org.vfny.geoserver.global.dto.DataDTO;
import org.vfny.geoserver.global.dto.GeoServerDTO;
import org.vfny.geoserver.global.dto.WCSDTO;
import org.vfny.geoserver.global.dto.WFSDTO;
import org.vfny.geoserver.global.dto.WMSDTO;
import org.vfny.geoserver.global.xml.XMLConfigReader;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.logging.Level;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Load GeoServer configuration.
 *
 * 

* The existing getServer instances is updated with a call to load(..) based on * the existing XML configuration files. *

* *

* It seems this class also creates the GeoServer instance in a lazy fashion! * That would mean that if this class cannot load, the application cannot * load? This could not possibly be the case, because the load action should * only appear when logged in. *

* *

* Load need to remain on the current page, right now it takes us on a wild * ride back to the welcome screen. *

* *

* Q: Does this need to load the Validation Processor as well? *

* @REVISIT: There seems to be quite a bit of code duplication in this class * with GeoServerPlugIn, loading things, especially with the * validation stuff. Anyway we could cut that down? Have one call * the other? Too close to release to do sucha refactoring but * in 1.4 we should. -CH */ public class LoadXMLAction extends ConfigAction { public ActionForward execute(ActionMapping mapping, ActionForm form, UserContainer user, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionForward r1 = loadValidation(mapping, form, request, response); ActionForward r2 = loadGeoserver(mapping, form, request, response); getApplicationState().fireChange(); return mapping.findForward("config"); } private ActionForward loadGeoserver(ActionMapping mapping, ActionForm form, //UserContainer user, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletContext sc = request.getSession().getServletContext(); WMSDTO wmsDTO = null; WFSDTO wfsDTO = null; WCSDTO wcsDTO = null; GeoServerDTO geoserverDTO = null; DataDTO dataDTO = null; //DJB: changed for geoserver_data_dir // File rootDir = new File(sc.getRealPath("/")); File rootDir = GeoserverDataDirectory.getGeoserverDataDirectory(); XMLConfigReader configReader; try { configReader = new XMLConfigReader(rootDir, sc); } catch (ConfigurationException configException) { configException.printStackTrace(); return mapping.findForward("welcome"); //throw new ServletException( configException ); } if (configReader.isInitialized()) { // These are on separate lines so we can tell with the // stack trace/debugger where things go wrong wmsDTO = configReader.getWms(); wfsDTO = configReader.getWfs(); wcsDTO = configReader.getWcs(); geoserverDTO = configReader.getGeoServer(); dataDTO = configReader.getData(); } else { System.err.println("Config Reader not initialized for LoadXMLAction.execute()."); return mapping.findForward("welcome"); // throw new ServletException( new ConfigurationException( "An error occured loading the initial configuration" )); } // Update GeoServer try { getWCS(request).load(wcsDTO); getWFS(request).load(wfsDTO); getWMS(request).load(wmsDTO); getWCS(request).getGeoServer().load(geoserverDTO); getWCS(request).getData().load(dataDTO); getWFS(request).getGeoServer().load(geoserverDTO); getWFS(request).getData().load(dataDTO); } catch (ConfigurationException configException) { configException.printStackTrace(); return mapping.findForward("welcome"); // throw new ServletException( configException ); } // Update Config getGlobalConfig().update(geoserverDTO); getDataConfig().update(dataDTO); getWCSConfig().update(wcsDTO); getWFSConfig().update(wfsDTO); getWMSConfig().update(wmsDTO); getApplicationState(request).notifyLoadXML(); // We need to stash the current page? // or can we use null or something? // if (LOGGER.isLoggable(Level.FINER)) { LOGGER.finer(new StringBuffer("request: ").append(request.getServletPath()).toString()); LOGGER.finer(new StringBuffer("forward: ").append(mapping.getForward()).toString()); } return mapping.findForward("config"); } private ActionForward loadValidation(ActionMapping mapping, ActionForm form, //UserContainer user, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletContext sc = request.getSession().getServletContext(); WFS wfs = getWFS(request); if (wfs == null) { // lazy creation on load? loadGeoserver(mapping, form, request, response); } //CH- fixed for data dir, looks like this got missed first time around. File rootDir = GeoserverDataDirectory.getGeoserverDataDirectory(); try { File plugInDir = findConfigDir(rootDir, "plugIns"); File validationDir = findConfigDir(rootDir, "validation"); Map plugIns = XMLReader.loadPlugIns(plugInDir); Map testSuites = XMLReader.loadValidations(validationDir, plugIns); ValidationConfig vc = new ValidationConfig(plugIns, testSuites); sc.setAttribute(ValidationConfig.CONFIG_KEY, vc); } catch (Exception e) { // LOG error e.printStackTrace(); return mapping.findForward("config.validation"); } return mapping.findForward("config.validation"); } private File findConfigDir(File rootDir, String name) throws Exception { return GeoserverDataDirectory.findConfigDir(rootDir, name); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy