/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * SimpleWmsGetMapUrl.java * * Created on 14. M\u00E4rz 2005, 16:00 */ package de.cismet.cismap.commons.raster.wms.simple; import de.cismet.cismap.commons.interaction.CismapBroker; /** * Einfache Klasse um einen WMS Aufruf zu parametrisieren nur eine WMS String mitschneiden und dann einfach die Breite, * Hoehe und<br> * die Bounding Box durch eindeutige (und nicht zu kurze) Token ersetzen. Fertig :-)<br> * <br> * Bsp:<br> * <code> * http://geoportal.wuppertal.de/wms/wms?null&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&WIDTH=<cids:width>&HEIGHT=<cids:height>&BBOX=<cids:boundingBox>&SRS=EPSG:31466&FORMAT=image/png&TRANSPARENT=false&BGCOLOR=0xF0F0F0&EXCEPTIONS=application/vnd.ogc.se_xml&LAYERS=R102:DGK5</code> * <br/> * <br/> * <b>WARNING: if you use the SRS_TOKEN be aware that the SRS is always fetched from the main mapping component!</b> * * @author hell * @version $Revision$, $Date$ */ public class SimpleWmsGetMapUrl { //~ Static fields/initializers --------------------------------------------- public static final String WIDTH_TOKEN = "<cismap:width>"; // NOI18N public static final String HEIGHT_TOKEN = "<cismap:height>"; // NOI18N public static final String BOUNDING_BOX_TOKEN = "<cismap:boundingBox>"; // NOI18N // NOTE: not configurable public static final String BOUNDING_BOX_TOKEN_LL_X = "<cismap:boundingBox_ll_x>"; // NOI18N public static final String BOUNDING_BOX_TOKEN_LL_Y = "<cismap:boundingBox_ll_y>"; // NOI18N public static final String BOUNDING_BOX_TOKEN_UR_X = "<cismap:boundingBox_ur_x>"; // NOI18N public static final String BOUNDING_BOX_TOKEN_UR_Y = "<cismap:boundingBox_ur_y>"; // NOI18N public static final String SRS_TOKEN = "<cismap:srs>"; // NOI18N public static final String EPSG_NAMESPACE = "http://www.opengis.net/gml/srs/epsg.xml"; // NOI18N //~ Instance fields -------------------------------------------------------- protected String urlTemplate; private double x1 = 0.0; private double y1 = 0.0; private double x2 = 0.0; private double y2 = 0.0; private String widthToken; private String heightToken; private String boundingBoxToken; private String payloadTemplate; private int width = 0; private int height = 0; //~ Constructors ----------------------------------------------------------- /** * Creates a new SimpleWmsGetMapUrl object. * * @param urlTemplate DOCUMENT ME! */ public SimpleWmsGetMapUrl(final String urlTemplate) { this(urlTemplate, null); } /** * Creates a new SimpleWmsGetMapUrl object. * * @param urlTemplate DOCUMENT ME! * @param payloadTemplate DOCUMENT ME! */ public SimpleWmsGetMapUrl(final String urlTemplate, final String payloadTemplate) { this(urlTemplate, WIDTH_TOKEN, HEIGHT_TOKEN, BOUNDING_BOX_TOKEN, payloadTemplate); } /** * Creates a new instance of SimpleWmsGetMapUrl. * * @param urlTemplate DOCUMENT ME! * @param widthToken DOCUMENT ME! * @param heightToken DOCUMENT ME! * @param boundingBoxToken DOCUMENT ME! */ public SimpleWmsGetMapUrl(final String urlTemplate, final String widthToken, final String heightToken, final String boundingBoxToken) { this(urlTemplate, widthToken, heightToken, boundingBoxToken, null); } /** * Creates a new SimpleWmsGetMapUrl object. * * @param urlTemplate DOCUMENT ME! * @param widthToken DOCUMENT ME! * @param heightToken DOCUMENT ME! * @param boundingBoxToken DOCUMENT ME! * @param payloadTemplate DOCUMENT ME! */ public SimpleWmsGetMapUrl(final String urlTemplate, final String widthToken, final String heightToken, final String boundingBoxToken, final String payloadTemplate) { this.urlTemplate = urlTemplate; this.widthToken = widthToken; this.heightToken = heightToken; this.boundingBoxToken = boundingBoxToken; this.payloadTemplate = payloadTemplate; } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPayloadTemplate() { return payloadTemplate; } /** * DOCUMENT ME! * * @param payloadTemplate DOCUMENT ME! */ public void setPayloadTemplate(final String payloadTemplate) { this.payloadTemplate = payloadTemplate; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String createPayload() { if (payloadTemplate == null) { return null; } String payload = payloadTemplate; payload = payload.replaceAll(heightToken, String.valueOf(height)); payload = payload.replaceAll(widthToken, String.valueOf(width)); payload = payload.replaceAll(BOUNDING_BOX_TOKEN_LL_X, String.valueOf(x1)); payload = payload.replaceAll(BOUNDING_BOX_TOKEN_LL_Y, String.valueOf(y1)); payload = payload.replaceAll(BOUNDING_BOX_TOKEN_UR_X, String.valueOf(x2)); payload = payload.replaceAll(BOUNDING_BOX_TOKEN_UR_Y, String.valueOf(y2)); final String srsCode = CismapBroker.getInstance().getSrs().getCode(); final String srs = srsCode.substring(srsCode.indexOf(':') + 1); payload = payload.replaceAll(SRS_TOKEN, EPSG_NAMESPACE + "#" + srs); // NOI18N return payload; } /** * DOCUMENT ME! * * @param width DOCUMENT ME! */ public void setWidth(final int width) { this.width = width; } /** * DOCUMENT ME! * * @param height DOCUMENT ME! */ public void setHeight(final int height) { this.height = height; } /** * DOCUMENT ME! * * @param coord DOCUMENT ME! */ public void setX1(final double coord) { x1 = coord; } /** * DOCUMENT ME! * * @param coord DOCUMENT ME! */ public void setY1(final double coord) { y1 = coord; } /** * DOCUMENT ME! * * @param coord DOCUMENT ME! */ public void setX2(final double coord) { x2 = coord; } /** * DOCUMENT ME! * * @param coord DOCUMENT ME! */ public void setY2(final double coord) { y2 = coord; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getUrlTemplate() { return urlTemplate; } /** * DOCUMENT ME! * * @param urlTemplate DOCUMENT ME! */ public void setUrlTemplate(final String urlTemplate) { this.urlTemplate = urlTemplate; } @Override public String toString() { // NOTE: the payload will not be inserted here, since this is the place where the getMap GET url is built String url = urlTemplate.replaceAll(widthToken, new Integer(width).toString()); url = url.replaceAll(heightToken, new Integer(height).toString()); url = url.replaceAll( boundingBoxToken, new Double(x1).toString() + "," // NOI18N + new Double(y1).toString() + "," // NOI18N + new Double(x2).toString() + "," // NOI18N + new Double(y2).toString()); // we can always replace all since the code is always present, requests without SRS_TOKEN won't be affected url = url.replaceAll(SRS_TOKEN, CismapBroker.getInstance().getSrs().getCode()); return url; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getWidth() { return width; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getHeight() { return height; } }