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: }