Mercurial > dive4elements > gnv-client
view gnv/src/main/java/de/intevation/gnv/action/WMSAction.java @ 970:d91ffd0e8239
Some small xpath changes for wms output regarding rev1134 (issue198).
gnv/trunk@1135 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 27 May 2010 16:51:52 +0000 |
parents | f550bd27a3f1 |
children | d1ed5c51c0de |
line wrap: on
line source
package de.intevation.gnv.action; import de.intevation.gnv.action.sessionmodel.DiagrammOptions; import de.intevation.gnv.action.sessionmodel.SessionModel; import de.intevation.gnv.action.sessionmodel.SessionModelFactory; import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; import de.intevation.gnv.artifactdatabase.objects.InputParameter; import de.intevation.gnv.artifactdatabase.objects.OutputMode; import de.intevation.gnv.artifactdatabase.objects.OutputParameter; import de.intevation.gnv.util.XMLUtils; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.w3c.dom.Document; /** * This controller is used to publish the results of the current artifact as * WMS. The wms export mode of the artifact server is triggered which feeds a * MapServer with the given shapefiles (path to the shapefiles is stored in the * artifact). After calling this controller, the shapefiles are ready to be * queried as WMS layers. * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class WMSAction extends DescribeUIAction { public static final String XPATH_MAPSERVER_PATH = "/art:meta/art:mapserver/art:server/text()"; public static final String XPATH_MAPSERVER_MAPFILE = "/art:meta/art:mapserver/art:map/text()"; public static final String XPATH_LAYER_TITLE = "/art:meta/art:layer/art:title/text()"; public static final String XPATH_LAYER_NAME = "/art:meta/art:layer/art:name/text()"; public static final String XPATH_TTL = "/art:meta/art:mapserver/art:ttl/text()"; /** * the logger, used to log exceptions and additonaly information */ private static Logger logger = Logger.getLogger(WMSAction.class); /** * Constructor */ public WMSAction() { super(); } @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { logger.debug("WMSAction.execute"); try { SessionModel sm = SessionModelFactory.getInstance().getSessionModel( request); OutputMode outputMode = sm.getOutputMode("wms"); Collection<InputParameter> ips = null; if (outputMode != null) { Collection<OutputParameter> inputParameter = outputMode.getOutputParameters(); if (inputParameter != null) { ips = new ArrayList<InputParameter>(inputParameter.size()); Iterator<OutputParameter> it = inputParameter.iterator(); DiagrammOptions diagrammOptions = new DiagrammOptions(); int params = 0; while (it.hasNext()) { String name = it.next().getName(); String[] values = request.getParameterValues(name); String value = request.getParameter(name); InputParameter ip = new DefaultInputParameter(name, encode(values)); ips.add(ip); if (value != null) { ++params; diagrammOptions.setValue(name, encode(value)); } } if (params > 0) { sm.setDiagrammOptions(diagrammOptions); } } } ArtifactObject artifact = sm.getCurrentArtifact(); ArtifactDatabaseClientFactory factory = ArtifactDatabaseClientFactory.getInstance(); ArtifactDatabaseClient adc = factory.getArtifactDatabaseClient( getLocale(request)); ArtifactObject artifactfactory = sm.getSelectedArtifactFactory(); // do wms publishing Document meta = adc.publishWMS(artifactfactory,artifact,ips); String mapserverPath = XMLUtils.getStringXPath( meta, XPATH_MAPSERVER_PATH); String mapfilePath = XMLUtils.getStringXPath( meta, XPATH_MAPSERVER_MAPFILE); String layer = XMLUtils.getStringXPath( meta, XPATH_LAYER_NAME); String tmpTTL = XMLUtils.getStringXPath( meta, XPATH_TTL); layer = layer != null ? layer : artifact.getId(); String ttl = null; if (tmpTTL != null) { DateFormat df = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG, request.getLocale()); try { long tmp = Long.parseLong(tmpTTL); ttl = df.format(new Date(tmp)); } catch (NumberFormatException nfe) { logger.error("Error while parsing time to live."); logger.error(nfe,nfe); ttl = ""; } } if (logger.isDebugEnabled()) { logger.debug("Mapserver path: " + mapserverPath); logger.debug("Mapfile path: " + mapfilePath); logger.debug("Layer: " + layer); logger.debug("Layer ttl: " + ttl); } request.setAttribute("wms", true); request.setAttribute("mapserver", mapserverPath); request.setAttribute("mapfile", mapfilePath); request.setAttribute("layer", layer); request.setAttribute("ttl", ttl); if (mapserverPath != null && mapfilePath != null && layer != null){ request.setAttribute("wms_published", Boolean.TRUE); return super.execute(mapping, form, request, response); }else{ return super.execute(mapping, form, request, response); } } catch (Exception e) { logger.error(e, e); request.setAttribute( CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, e.getMessage()); return super.getExceptionForward(mapping); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :