ingo@1022: /* ingo@1022: * Copyright (c) 2010 by Intevation GmbH ingo@1022: * ingo@1022: * This program is free software under the LGPL (>=v2.1) ingo@1022: * Read the file LGPL.txt coming with the software for details ingo@1022: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1022: */ ingo@1022: tim@402: package de.intevation.gnv.action.mapviewer; tim@402: tim@558: import java.io.ByteArrayInputStream; tim@402: import java.io.InputStream; tim@558: import java.util.ArrayList; tim@402: import java.util.Collection; tim@558: import java.util.Iterator; tim@402: tim@402: import javax.servlet.http.HttpServletRequest; tim@402: import javax.servlet.http.HttpServletResponse; tim@402: tim@402: import org.apache.log4j.Logger; tim@402: import org.apache.struts.action.ActionForm; tim@402: import org.apache.struts.action.ActionForward; tim@402: import org.apache.struts.action.ActionMapping; tim@402: tim@952: import de.intevation.gnv.action.ArtifactDatabaseActionBase; tim@952: import de.intevation.gnv.action.mapviewer.parser.ExternalCallParser; tim@952: import de.intevation.gnv.action.mapviewer.parser.XMLExternalCallParser; tim@952: import de.intevation.gnv.action.sessionmodel.SessionModel; tim@952: import de.intevation.gnv.action.sessionmodel.SessionModelFactory; tim@952: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; tim@952: import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; tim@952: import de.intevation.gnv.artifactdatabase.objects.map.MapService; tim@952: tim@402: /** tim@952: * This class provides the businesslogic for handling an tim@952: * MV-GNV-Interface-call. tim@952: * This call can be done in two ways. tim@952: * First is to put the requestbody into the body of the http-post-request. tim@952: * Second to put the requestbody to the parameter "document" of the tim@952: * http-post-request. sascha@684: * @author Tim Englich tim@402: */ tim@402: public class MapViewerCallAction extends ArtifactDatabaseActionBase { tim@402: tim@402: /** tim@402: * the logger, used to log exceptions and additonaly information tim@402: */ tim@402: private static Logger log = Logger.getLogger(MapViewerCallAction.class); tim@402: tim@402: /** tim@402: * Constructor tim@402: */ tim@402: public MapViewerCallAction() { tim@402: super(); tim@402: } tim@402: tim@402: /** tim@402: * @see de.intevation.gnv.action.ArtifactDatabaseActionBase#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) tim@402: */ tim@402: @Override tim@402: public ActionForward execute(ActionMapping mapping, ActionForm form, tim@402: HttpServletRequest request, tim@402: HttpServletResponse response) throws Exception { tim@402: log.debug("MapViewerCallAction.execute"); tim@558: InputStream inputStream = null; tim@558: String documentvalue = request.getParameter("document"); tim@558: if (documentvalue != null){ tim@562: documentvalue = documentvalue.trim(); tim@558: inputStream = new ByteArrayInputStream(documentvalue.getBytes()); tim@558: }else{ tim@558: inputStream = request.getInputStream(); tim@558: } sascha@681: tim@402: if (inputStream != null){ tim@402: try { tim@402: ExternalCallParser ecp = new XMLExternalCallParser(inputStream); tim@402: ecp.parse(); tim@402: String geometry = ecp.getGeometry(); tim@402: String srs = ecp.getSRS(); tim@402: Collection mapServices = ecp.getMapServices(); sascha@681: sascha@681: Collection availableFactories = tim@558: ArtifactDatabaseClientFactory tim@402: .getInstance() tim@402: .getArtifactDatabaseClient(getLocale(request)) tim@402: .getArtifactFactoryMetaInformation(mapServices, tim@402: geometry, tim@402: srs); sascha@681: sascha@681: Collection providedFactories = tim@558: ArtifactDatabaseClientFactory tim@558: .getInstance() tim@558: .getArtifactDatabaseClient(getLocale(request)) tim@558: .getArtifactFactories(); sascha@681: tim@558: // Sort out which ArtifactFactories should not be used. sascha@681: Collection usedFactories = tim@558: new ArrayList(availableFactories.size()); sascha@681: tim@558: Iterator it = availableFactories.iterator(); tim@558: while (it.hasNext()){ tim@558: ArtifactObject ao = it.next(); tim@558: if (providedFactories.contains(ao)){ tim@558: usedFactories.add(ao); tim@558: } tim@558: } sascha@681: tim@558: SessionModel sm = SessionModelFactory tim@558: .getInstance() tim@558: .getSessionModel(request); tim@558: sm.resetModel(); tim@558: sm.setArtifacteFactories(usedFactories); tim@402: } catch (Exception e) { tim@402: log.error(e,e); tim@402: } tim@402: }else{ tim@402: log.error("Kein Anfragedokument übergeben."); tim@402: } tim@402: return super.execute(mapping, form, request, response); tim@402: } tim@402: tim@402: }